(大家好~我是正在准备秋招的大学生,后续会持续更新刷题经验、实习问题和八股文总结~如果觉得内容对你有帮助,欢迎点赞 + 关注,你的支持是我坚持更新的最大动力~感谢!)

Redis的Zset是基于压缩列表或跳表实现的

选择策略:当有序集合的数量小于128并且每个节点的大小小于64字节时,我们选择压缩列表,否则选择跳表.

压缩列表:Redis为了节省内存空间采取的顺序型存储结构

结构如下:

(图片摘自小林coding)

zlbytes:压缩列表总字节大小

zltail:尾节点偏移量

zllen:节点数量

entry:1.prevlen:前一个节点的长度,用于反向遍历

         2.encoding:数据类型和长度

         3.data:数据内容

zlend:结束标记

优势:动态适应数据类型和长度,避免浪费空间

缺点:1."连锁更新",某个节点长度变化,后续prevlen可能均重写

2.除了查找首尾元素,查找其它节点时间复杂度O(n)

更多推荐