Redis 有序集合(sorted set)命令汇总

Jul 18, 2018 阅读(4947)

标签: Redis

描述

和散列存储着键与值的映射类似,有序集合也存储着成员(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

MongoDB学习园