• 没有重复元素
  • 其中的元素可以排序
    • 排序依据: score
    • score 可以重复
  • 获取指定分数
  • 元素范围查询
  • 计算成员排名

image.png

比较:

image.png

2.6.1 命令

1. 集合内

(1) 添加成员
  • zadd
    • O(log n)

(2) 计算成员个数
  • zcard
    • O(1)

(3) 计算某个成员的分数
  • zscore

(4) 计算成员的排名
  • zrank
  • zrevrank

(5) 删除成员
  • zrem

(6) 增加成员的分数
  • zincrby

(7) 返回指定排名范围的成员
  • zrange
  • zrevrange
  • withscores 选项: 返回排名的同时也返回 score

(8) 返回指定分数范围的成员
  • zrangebyscore
  • zrevrangebyscore

(9) 返回指定分数范围成员个数
  • zcount

(10) 删除指定排名内的升序元素
  • zremrangebyrank

(11) 删除指定分数范围的成员
  • zremrangebyscore

2. 集合间的操作

将两个有序集合导入到 Redis 中:

image.png

image.png

(1) 交集
  • zinterstore

(2) 并集
  • zunionstore

表2-8 有序集合命令的时间复杂度
image.png

2.6.2 内部编码

有序集合类型的内部编码有两种:

  • ziplist: 当有序集合的元素个数小于 zset-max-ziplist-entries 配置 (默认128个), 同时每个元素的值都小于 zset-max-ziplist-value 配置 (默认64字节) 时, Redis 会用 ziplist 来作为有序集合的内部实现 ,ziplist 可以有效减少内存的使用。
  • skiplist: 当 ziplist 条件不满足时, 有序集合会使用 skiplist 作为内部实现, 因为此时 ziplist 的读写效率会下降。

2.6.3 使用场景

排行榜系统.