redis源码中的ziplist zskiplist 压缩表和跳表

在压缩双链表中,节省了前驱和后驱指针的空间,在 64 位机器上共节省了 8 个字节, 这让数据在内存中更为紧 凑。只要清晰的描述每个数据项的边界,就可以轻易得到前驱后 驱数据项的位置,ziplist 就是这么做的。 ziplist 的格式可以表示为:

<zlbytes><zltail><zllen><entry>...<entry><zlend>&oq=<zlbytes><zltail><zllen><entry>...<entry><zlend>

zlbytes 是 ziplist 占用的空间;zltail 是最后一个数据项的偏移位置,这方便逆向遍历链 表,也是双链表的特 性;zllen 是数据项entry 的个数;zlend 就是 255,占 1B。 下面详细展开 entry 的结构。entry 的格式即为典型的 type-lenght-value,即 TLV,表述如下:

<prelen><<encoding + lensize><len>><data>

 

域 1)是前驱数据项的大小。因为不用描述前驱的数据类型,描述较为简单。 域 2)是此数据项的的类型和数据大小。为了节省空间,redis 预设定了多种长度的字符串 和整数。

 

 

zset 由 dict和skiplist构成,dict用来判断是否存在该元素

sadd底层数据结构是intset和dict,全整数则用intset

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值