描述
和散列存储着键与值的映射类似,有序集合也存储着成员(memeber)与分值(score)之间的映射.并且提供了分值处理命令,以及根据分值大小有序地获取(fetch) 或扫描(scan)成员和分值的命令.
有序集合是Redis里面唯一一个既可以根据成员访问元素,又可以根据分值的排序来访问元素的结构.
有序集合命令
zdd 新增(及更新)
zadd key-name score member [ score member ... ]
描述: 将带有给定分值的成员添加到有序集合中,并返回成功新增成员的数量(更新的不算). 成员存在则相当于是更新score操作;
zcard 查集合总数
zcard key-name
描述: 返回有序集合包含的成员数
zrem 根据成员删除
zrem key-name member [ member ... ]
描述: 有序集合中移除给定的的成员,并返回被移除成员的数量
zremrangebyrank 根据排名删除
zremrangebyrank key-name start stop
描述: 移除有序集合中排名介于 start 和 stop 之间的所有成员
zremrangebyscore 根据分值范围删除
zremrangebyscore key-name min max
描述: 移除有序集合中分支介于 min 和 max 直接的所有成员
zincrby 成员分值增加
zincrby key-name incerment member
描述: 将 member 成员的分值加上increment
zcount 分值范围求总数
zcount key-name min max
描述: 返回分值介于min 和 max 之间的成员数量
zrank 查成员排名
zrank key-name member
描述: 返回成员在有序集合中的排名(分值升序)
zscore 查成员分值
zscore key-name member
描述: 返回成员member的分值
zrange 查指定排名范围的数据
zrange key-name start stop [withscores]
描述: 返回有序集合中(分值升序)排名介于 start 和 stop 之间的成员,如果给定了可选的 withscores 选项,那么命令会将成员的分值一并返回
zrangebyscore 查指定分值范围的数据
zrangebyscore key-name min max [withscores] [limit offset count]
描述: 返回(分值升序)有序集合中, min <= 分值 <= max 之间的所有成员
实例: zrangebyscore zstudent 0 60 withscores limit 1 1
zrevrangebyscore 降序查指定分值范围的数据
zrevrangebyscore key-name max min [withscores] [limit offset count]
描述: 返回(分值降序)有序集合中, min <= 分值 <= max 之间的所有成员
实例: zrevrangebyscore zstudent 60 0 withscores limit 0 1
zrevrank 降序查成员排名
zrevrank key-name member
描述: 返回成员在有序集合中的排名(分值降序)
zrevrange 降序查指定排名范围的数据
zrevrange key-name start stop [withscores]
描述: 返回有序集合中(分值降序)排名介于 start 和 stop 之间的成员,如果给定了可选的 withscores 选项,那么命令会将成员的分值一并返回
zinterstore 集合交集运算
zinterstore dest-key key-count key [key1 ...] [weights weight [weight ...]] [aggregate sum | min | max]
描述: 对给定的有序集合执行类似于集合的交集运算,默认使用聚合函数sum这个函数会把各个有序集合的成员分值都加起来.
对 key-count (key key1 ...)个有序集合进行交集运算,并将结果存于 dest-key,如果 dest-key之前就存在则会覆盖掉(remove 后 add);
dest-key: 计算结果保存的地方
key-count: 表示你要计算集合的交集的个数,
weights:代表权重,它可以设置每个元素的权重,也就是在每个元素参与计算时,元素的分数会乘以你指定的一个权重。
[aggregate sum | min | max]:代表元素如果有交集,是计算它的和、最大值还是最小值。
实例:
del zset-1 zset-2 zset-i-res zset-u-res zadd zset-1 1 A 2 B 3 C zadd zset-2 2 B 3 A 4 Z
zinterstore zset-i-res 2 zset-1 zset-2 aggregate sum
简写(aggregate不写默认是sum)命令如下:
zinterstore zset-i-res 2 zset-1 zset-2
操作后 zset-i-res 的结果: 4 A 4 B
zinterstore zset-i-res 2 zset-1 zset-2 weights 10 0.1
// zset-1 权重是10, zset-2 权重是 0.1
操作后 zset-i-res 的结果: 10.3 A 20.2 B
zunionstore zset-u-res 2 zset-1 zset-2 weights 10 5
操作后 zset-u-res 的结果: 20 Z 25 A 30 B C 30
zunionstore 集合并集运算
zunionstore dest-key key-count key [key ...] [weights weight [weight ...]] [aggregate sum | min | max]
描述: 对给定的有序集合执行类似于集合的并集运算,使用和zinterstore类似;
实例测试
测试命令
del zstudent //删除数据 zadd zstudent 80 '小明' zadd zstudent 100 '小伟' 100 '小王' zadd zstudent 90 '小白' 60 '小菜' 50 '小明' zadd zstudent 0 '小伟' zrem zstudent zcard zstudent zrank zstudent '小伟' zrevrank zstudent '小伟' zrange zstudent 0 2 withscores zrange zstudent 0 -1 withscores //集合的所有元素 zrangebyscore zstudent 0 60 zrangebyscore zstudent 0 60 withscores zrangebyscore zstudent 0 60 withscores limit 1 1
命令取名参看单词附录
union 并集
intersection 交集
scores 分值
range 范围
rank 排名
remove 删除
reverse 相反
count 计数
总结:
1,zrev* 命令的工作方式和相对应的非逆序命令的工作方式完全一样(逆序就是指元素按照分值从大到小排序).
注意:
1,redis 中的key 都区分大小写;
2, member 在有序集合中是唯一的;
redis-desktop-manager 命令行切换库: select 库号码
例如: select 1
官网参考:https://redis.io/commands#sorted_set