美文网首页
Redis常用命令七:有序集合

Redis常用命令七:有序集合

作者: 最底层的技术渣 | 来源:发表于2019-06-10 00:14 被阅读0次
    前言:

    Redis 有序集合和集合一样也是string类型元素的集合,且不允许重复的成员。
    不同的是每个元素都会关联一个double类型的分数。redis正是通过分数来为集合中的成员进行从小到大的排序。
    有序集合的成员是唯一的,但分数(score)却可以重复。
    集合是通过哈希表实现的,所以添加,删除,查找的复杂度都是O(1)。 集合中最大的成员数为 232 - 1 (4294967295, 每个集合可存储40多亿个成员)。

    应用场景:APP的排行榜(下载排行,阅读排行)、电影打分等等

    0、返回有序集中,成员的分数值

    ZSCORE key member
    
    例子:zscore 键名 成员名称

    1、向有序集合添加一个或多个成员,或者更新已存在成员的分数

     ZADD key score1 member1 [score2 member2]   
    
    例子: zadd 键名 分数 成员名称

    2、通过索引区间返回有序集合成指定区间内的成员(从小到大排序)(和zrevrang相反) ↓

    ZRANGE key start stop [WITHSCORES] 
    
    例子:zrange 键名 开始值0 结束值-1

    3、返回有序集中指定(下标区间内)的成员,通过索引,分数从高到低排序(从大到小排序)(和zrang相反)↑

    ZREVRANGE key start stop [WITHSCORES]
    
    例子:zrevrang 键名 起始位置 结束位置
    4、返回有序集中指定(分数区间内)的成员,分数从高到底(和zrevrange很像,区别在于一个是根据指定位置返回结果,一个是指定分数来返回结果)↑
    例子 zrevrangebyscore 键名 指定的最大分数值 指定的最小分数值

    特别注意: 分数值指定时一定是大的在前,小的在后,才会返回正确的结果

    ZREVRANGEBYSCORE key max min [WITHSCORES]
    

    5、 通过分数返回有序集合指定区间内的成员,分数从低到高(和zrevrangbyscore相反)

    ZRANGEBYSCORE key min max [WITHSCORES] [LIMIT]
    
    例子 zrangbyscore 键名 指定的最小分数 指定的最大分数 (LIMIT 指定个数)

    6、 获取有序集合的成员数

    ZCARD key
    
    例子:ZCARD 键名

    7 、计算在有序集合中指定区间分数的成员个数 (结果 最小值 <= 个数 <= 最大值)

    ZCOUNT key min max 
    
    例子 :zcount 键名 最小值 最大值
    8、移除有序集合中的一个或多个成员
     ZREM key member [member ...]
    
    例子 zrem 键名 成员一 成员二……
    9、返回有序集合中指定成员排名的索引,返回有序集 key 中成员 member 的排名。其中有序集成员按 score 值递增(从小到大)顺序排列。排名以 0 为底,也就是说, score 值最小的成员排名为 0 。(和ZREVRANK相反)
    ZRANK key member
    
    例子:zrank 键名 成员
    127.0.0.1:6379> zrange fruits 0 -1
    1) "pear"
    2) "apple"
    3) "orange"
    127.0.0.1:6379> zscore fruits pear
    "8.9000000000000004"
    127.0.0.1:6379> zscore fruits apple
    "9.0999999999999996"
    127.0.0.1:6379> zscore fruits orange
    "9.3000000000000007"
    127.0.0.1:6379> zrank fruits orange
    (integer) 2
    127.0.0.1:6379> zrank fruits pear
    (integer) 0
    
    10、有序集合中对指定成员的分数加上增量 increment

    为有序集 key 的成员 memberscore 值加上增量 increment

    可以通过传递一个负数值 increment ,让 score 减去相应的值,比如 ZINCRBY key -5 member ,就是让 memberscore 值减去 5

    key 不存在,或 member 不是 key 的成员时, ZINCRBY key increment member 等同于 ZADD key increment member

    key 不是有序集类型时,返回一个错误。

    score 值可以是整数值或双精度浮点数。

    返回值member 成员的新 score 值,以字符串形式表示。

    ZINCRBY key increment member
    
    例子 zincrby 键名 要处理的值(默认为正数,负数则减去) 成员名称
    127.0.0.1:6379> zscore fruits pear
    "8.9000000000000004"
    127.0.0.1:6379> ZINCRBY fruits 10 pear
    "18.899999999999999"
    
    11、计算给定的一个或多个有序集的并集,并存储在新的 key 中

    计算给定的一个或多个有序集的并集,其中给定 key 的数量必须以 numkeys 参数指定,并将该并集(结果集)储存到 destination

    默认情况下,结果集中某个成员的 score 值是所有给定集下该成员 score 值之

    WEIGHTS

    使用 WEIGHTS 选项,你可以为 每个 给定有序集 分别 指定一个乘法因子(multiplication factor),每个给定有序集的所有成员的 score 值在传递给聚合函数(aggregation function)之前都要先乘以该有序集的因子。

    如果没有指定 WEIGHTS 选项,乘法因子默认设置为 1

    AGGREGATE

    使用 AGGREGATE 选项,你可以指定并集的结果集的聚合方式。

    默认使用的参数 SUM ,可以将所有集合中某个成员的 score 值之 作为结果集中该成员的 score 值;使用参数 MIN ,可以将所有集合中某个成员的 最小 score 值作为结果集中该成员的 score 值;而参数 MAX 则是将所有集合中某个成员的 最大 score 值作为结果集中该成员的 score 值。

    返回值

    保存到 destination 的结果集的基数。

    ZUNIONSTORE destination numkeys key [key ...] [AGGREGATE SUM|MIN|MAX]
    
    例子 zunionstore 新集合名称 指定并集个数 并集的成员名1 并集的成员名2 聚合方式
    redis> ZRANGE programmer 0 -1 WITHSCORES
    1) "peter"
    2) "2000"
    3) "jack"
    4) "3500"
    5) "tom"
    6) "5000"
    
    redis> ZRANGE manager 0 -1 WITHSCORES
    1) "herry"
    2) "2000"
    3) "mary"
    4) "3500"
    5) "bob"
    6) "4000"
    # 公司决定加薪。。。除了程序员。。。
    redis> ZUNIONSTORE salary 2 programmer manager WEIGHTS 1 3   
    (integer) 6
    
    redis> ZRANGE salary 0 -1 WITHSCORES
    1) "peter"
    2) "2000"
    3) "jack"
    4) "3500"
    5) "tom"
    6) "5000"
    7) "herry"
    8) "6000"
    9) "mary"
    10) "10500"
    11) "bob"
    12) "12000"
    
    12、计算给定的一个或多个有序集的交集并将结果集存储在新的有序集合 key 中

    计算给定的一个或多个有序集的交集,其中给定 key 的数量必须以 numkeys 参数指定,并将该交集(结果集)储存到 destination

    默认情况下,结果集中某个成员的 score 值是所有给定集下该成员 score 值之和.

    ZINTERSTORE destination numkeys key [key ...]
    
    例子 zinterstore 新集合名称 个数 成员1 成员2
    redis > ZADD mid_test 70 "Li Lei"
    (integer) 1
    redis > ZADD mid_test 70 "Han Meimei"
    (integer) 1
    redis > ZADD mid_test 99.5 "Tom"
    (integer) 1
    
    redis > ZADD fin_test 88 "Li Lei"
    (integer) 1
    redis > ZADD fin_test 75 "Han Meimei"
    (integer) 1
    redis > ZADD fin_test 99.5 "Tom"
    (integer) 1
    
    redis > ZINTERSTORE sum_point 2 mid_test fin_test
    (integer) 3
    
    redis > ZRANGE sum_point 0 -1 WITHSCORES     # 显示有序集内所有成员及其 score 值
    1) "Han Meimei"
    2) "145"
    3) "Li Lei"
    4) "158"
    5) "Tom"
    6) "199"
    

    13 ZLEXCOUNT key min max
    在有序集合中计算指定字典区间内成员数量

    14 ZRANGEBYLEX key min max [LIMIT offset count]
    通过字典区间返回有序集合的成员

    15 ZREMRANGEBYLEX key min max
    移除有序集合中给定的字典区间的所有成员

    16 ZREMRANGEBYRANK key start stop
    移除有序集合中给定的排名区间的所有成员

    17 ZREMRANGEBYSCORE key min max
    移除有序集合中给定的分数区间的所有成员

    18 ZREVRANK key member
    返回有序集合中指定成员的排名,有序集成员按分数值递减(从大到小)排序

    19 ZSCAN key cursor [MATCH pattern] [COUNT count]
    迭代有序集合中的元素(包括元素成员和元素分值)

    相关文章

      网友评论

          本文标题:Redis常用命令七:有序集合

          本文链接:https://www.haomeiwen.com/subject/ynuwxctx.html