官方文档:https://redis.io/topics/data-types
在线教程:https://www.tutorialspoint.com/redis

基本介绍

Redis 有序集合和集合一样也是string类型元素的集合,且不允许重复的成员。不同的是每个元素都会关联一个float类型的分数。redis正是通过分数来为集合中的成员进行从小到大的排序。有序集合的成员是唯一的,但分数(score)却可以重复。集合是通过哈希表实现的。
大小限制:232-1个元素

常用指令

集合内

zadd key score member [score member …]

添加成员 返回结果代表成功添加成员的个数

zcard key

计算成员个数

zscore key member

计算某个成员的分数

zrank key member
zrevrank key member

zrank是从分数从低到高返回排名,zrevrank反之。

zrem key member [member …]

删除成员,返回结果为成功删除的个数。

zincrby key increment member

增加成员的分数

zrange key start end [withscores]
zrevrange key start end [withscores]

返回指定排名范围的成员,有序集合是按照分值排名的,zrange是从低到高返回,zrevrange反之。如果加上withscores选项,同时会返回成员的分数。

zrangebyscore key min max [withscores] [limit offset count]
zrevrangebyscore key max min [withscores] [limit offset count]

其中zrangebyscore按照分数从低到高返回,zrevrangebyscore反之。[limit offset count]选项可以限制输出的起始位置和个数。
同时min和max还支持开区间(小括号)和闭区间(中括号),-inf和
+inf分别代表无限小和无限大。

zcount key min max

返回指定分数范围成员个数

zremrangebyrank key start end

删除指定排名内的升序元素,删除第start到第end名的成员。

zremrangebyscore key min max

删除指定分数范围的成员。

集合间

交集

zinterstore destination numkeys key [key …] [weights weight [weight …]]
[aggregate sum|min|max]

  • destination:交集计算结果保存到这个键。
  • numkeys:需要做交集计算键的个数。
  • key[key…]:需要做交集计算的键。
  • weights weight[weight…]:每个键的权重,在做交集计算时,每个键中的每个member会将自己分数乘以这个权重,每个键的权重默认是1。
  • aggregate sum|min|max:计算成员交集后,分值可以按照sum(和)、min(最小值)、max(最大值)做汇总,默认值是sum。
并集

zunionstore destination numkeys key [key …] [weights weight [weight …]]
[aggregate sum|min|max]
该命令的所有参数和zinterstore是一致的,只不过是做并集计算.

内部编码

ziplist: 压缩列表
当有序集合的元素个数小于zset-max-ziplis-entries配置,同时每个元素的值都小于zset-max-ziplist-value配置时,Redis会用ziplist来作为有序集合的内部实现,ziplist可以有效减少内存的使用。

skiplist: 跳跃表
当ziplist条件不满足时,有序集合会使用skiplist作为内部实现,因为此时ziplist的读写效率会下降。

小tips

zset-max-ziplist-entries默认配置为128
zset-max-ziplist-value 默认配置为64字节