官方文档: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字节