Java八股文:Redis中Zset的底层实现(上)
·
(大家好~我是正在准备秋招的大学生,后续会持续更新刷题经验、实习问题和八股文总结~如果觉得内容对你有帮助,欢迎点赞 + 关注,你的支持是我坚持更新的最大动力~感谢!)
Redis的Zset是基于压缩列表或跳表实现的
选择策略:当有序集合的数量小于128并且每个节点的大小小于64字节时,我们选择压缩列表,否则选择跳表.
压缩列表:Redis为了节省内存空间采取的顺序型存储结构
结构如下:
(图片摘自小林coding)

zlbytes:压缩列表总字节大小
zltail:尾节点偏移量
zllen:节点数量
entry:1.prevlen:前一个节点的长度,用于反向遍历
2.encoding:数据类型和长度
3.data:数据内容
zlend:结束标记
优势:动态适应数据类型和长度,避免浪费空间
缺点:1."连锁更新",某个节点长度变化,后续prevlen可能均重写
2.除了查找首尾元素,查找其它节点时间复杂度O(n)
更多推荐

所有评论(0)