一、描述
redis其中一个数据结构为zset(sorted set-有序集合),其主要作用用于排行榜实现,你可以获取排名第几到第几的数据
二、数据结构
sorted set-有序集合在redis中有两种实现
1.ziplist,压缩双向链表,相关链接
2.skiplist,跳表实现
三、skiplist数据结构
score:分值,用于排序
backward:是第一层的前一个数据,即span=1
level[]:每一个层所代表的节点node
forward:该层级的下一个节点
span:到达该层级的下一个节点,实际跨越了多少个节点,也是方便用于zrange等排行榜查询的用处
四、注意点
4.1 插入数据
1.在插入数据的时候,通过level[]快速跳过不需要比较的节点,快速定位节点位置
2.在插入新的节点的时候,level[]的层级由随机决定该层级的高度
3.然后更新每一次受到影响的span,span代表该层节点到达下一节点应该要跨越的节点数量
4.2 查询排行榜,如zrange
1.先根据start,通过level[]和每一次的rank来快速定位第一层的起始位置
2.然后再根据end,来将结果输出给用户
五、参数控制
redis配置文件中用来控制zset到底是使用ziplist(压缩双向链表)还是skiplist(跳表)的参数:
zset-max-ziplist-entries 128
zset-max-ziplist-value 64
zset-max-ziplist-entries zset使用ziplist存储的时候,最大限制存储entries的个数zset-max-ziplist-value zset使用ziplist存储的时候,每个节点最大存储字节数
违反上述两个限制条件,均会导致zset将ziplist的数据结构切换为skiplist数据结构
而zset使用ziplist的原因,主要是出于在零散数据量少的时候,节省内容的占用