Redis ZSet (5)
存储类型 ZSet集合基本与Set相同,只是多了一个数值类型属性score,score相同时,按照Key的ASC码排序。 数据结构对比 数据结构 是否允许重复 是否有序 有序实现方式 List 是 是 索引下标 Set 否 否 无 ZSet 否 是 score属性 # 无序插入 127.0.0.1:6379> zadd lzset 20 c 30 d 10 b 1 a (integer) 4 # 获取数据是有序的 127.0.0.1:6379> zrange lzset 0 -1 withscores 1) "a" 2) "1" 3) "b" 4) "10" 5) "c" 6) "20" 7) "d" 8) "30" 存储(实现)原理 同时满足以下条件时使用ziplist编码: 元素数量小于128个 所有member的长度都小于64字节 在ziplist的内部,按照score排序递增来存储。插入的时候要移动之后的数据。 redis.conf配置 zset-max-ziplist-entries 128 zset-max-ziplist-value 64 超过阈值之后,使用skiplist+dict存储。 什么是skiplist? 下边是普通的有序列表 在这样一个链表中,如果我们要查找某个数据,那么需要从头开始逐个进行比较,直到找到包含数据的那个节点