redis 有序集合zset
为了兼顾O(1)复杂度的查找和高效的范围查找/排序,zset同时使用两种数据结构:
1. 哈希表(Dict / HashMap):
* 作用:建立从 member 到 score 的映射。
* 存储内容:键是 member,值是浮点型的 score。
* 优势:确保通过 member 查找其对应的 score 复杂度为 O(1)。
2. 跳跃表(Skiplist):
* 作用:按 score 从小到大排序所有元素,并支持基于分数的范围查询(如 ZRANGEBYSCORE)。
* 存储内容:每个节点包含 score 和 member。如果 score 相同,则按 member 的字典序(ASCII码值)排序。
* 优势:结合多级索引,查找、插入和范围操作的平均时间复杂度为 \(O(\log N)\)。
有序集合和散列一样,都用于存储键值对:有序集合zset的键被称为成员(member),每个成员都是各不相同的;而有序集合的值则被称为分值(score),分值必须
是浮点数。有序集合是redis中唯一一个既可以根据成员访问元素(这一点和散列一样),又可以根据分值以及分值的排列顺序来访问元素的结构。





127.0.0.1:6379> zadd zset-1 1 a 2 b 3 c (integer) 3 127.0.0.1:6379> zadd zset-2 4 b 1 c 0 d (integer) 3127.0.0.1:6379> zinterstore zset-i 2 zset-1 zset-2 (integer) 2 127.0.0.1:6379> zrange zset-i 0 -1 withscores 1) "c" 2) "4" 3) "b" 4) "6" 127.0.0.1:6379> zunionstore zset-u 2 zset-1 zset-2 aggregate min (integer) 4 127.0.0.1:6379> zrange zset-u 0 -1 withscores 1) "d" 2) "0" 3) "a" 4) "1" 5) "c" 6) "1" 7) "b" 8) "2" 127.0.0.1:6379> sadd set-1 a d (integer) 2 127.0.0.1:6379> zunionstore zset-u2 3 zset-1 zset-2 set-1 (integer) 4 127.0.0.1:6379> zrange zset-u2 0 -1 withscores 1) "d" 2) "1" 3) "a" 4) "2" 5) "c" 6) "4" 7) "b" 8) "6" 127.0.0.1:6379>
浙公网安备 33010602011771号