[redis] zset数据结构

一、描述

redis其中一个数据结构为zset(sorted set-有序集合),其主要作用用于排行榜实现,你可以获取排名第几到第几的数据


二、数据结构

sorted set-有序集合在redis中有两种实现

1.ziplist,压缩双向链表,相关链接

2.skiplist,跳表实现


三、skiplist数据结构

[redis] zset数据结构_第1张图片

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的原因,主要是出于在零散数据量少的时候,节省内容的占用


你可能感兴趣的:(kv数据库_redis)