Redis急速入门

一、redis的基本数据类型

0.压缩列表(基础类型)

redis独特的数据结构,不直接使用,是一种基础数据类型。没有指针,但是同时有变长编码(数组不具备的动态节点数据类型和节点长度)的特性。相当于把链表去掉指针,压缩放进一段连续内存中,通过编码的偏移量关联,节省了内存开销。具体结构如下。

zlbytes | zltail | zllen | entry1 | entry2 | ... | entryN | zlend
  • zlbytes:记录整个压缩列表占用的字节数。

  • zltail:记录尾节点到起始地址的偏移量,便于快速从尾部操作。

  • zllen:记录节点数量(小于 65535 时准确,超过时需遍历)。

  • entryX:每个节点存储一个元素,节点结构包含前一节点长度(用于反向遍历)、编码(记录数据类型和长度)、实际数据。

  • zlend:结束标志(固定值 0xFF)。

1.String字符串

SDS结构:len、free、buf[]。

2.List列表

数据量少时使用压缩列表,由于每个节点需要保存前一节点的长度,在修改数据时可能产生O(N²)的连锁反应,所以数据量大时使用双向链表。Redis 3.2 以后都使用quickList 。即多个压缩列表节点组成的双向链表。这种结构避免了修改数据时产生大规模的连锁反应,提高了修改数据的效率,又很好地利用了压缩列表节省内存开销。压缩列表实现如下面示例。

zlbytes | zltail | zllen | entry1 | entry2 | ... | entryN | zlend

3.Set集合

少于512个整数数据时使用整形数组,否则使用哈希表。

4.Zset有序集合

数据量少时使用压缩列表,当时数据量大时就要使用跳表。比如需要查看某特定排名区间的数据,使用跳表时总能达到O(log N)的性能,使用压缩列表则是O(N),当这个N很大时,性能消耗就很大了。跳表逻辑上类似平衡二叉树,都是通过上层父节点开始向下层数据检索,可以快速找到目标数据。跳表由多个“层”组成,最底层是包含所有元素的有序链表。压缩列表示例如下,和List差不多样,不过每个节点有score,且按score升序排列。

zlbytes | zltail | zllen | member1 | score1 | member2 | score2 | ... | memberN | scoreN | zlend

下面是跳表的结构:

  • 每个节点包含一个元素(member) 和分值(sc

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值