美文网首页Redis常用命令
第五部分:Redis之SortedSet(有序集合)

第五部分:Redis之SortedSet(有序集合)

作者: 快乐的bug制造者 | 来源:发表于2018-02-17 22:27 被阅读90次

    ZADD
    ZADD key score member [[score member] [score member] ...]

    将一个或多个 member 元素及其 score 值加入到有序集 key 当中。

    如果某个 member 已经是有序集的成员,那么更新这个 member 的 score 值,并通过重新插入这个 member 元素,来保证该 member 在正确的位置上。

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

    返回值:
    被成功添加的新成员的数量,不包括那些被更新的、已经存在的成员。

    # 添加单个元素
    
    redis> ZADD page_rank 10 google.com
    (integer) 1
    
    
    # 添加多个元素
    
    redis> ZADD page_rank 9 baidu.com 8 bing.com
    (integer) 2
    
    redis> ZRANGE page_rank 0 -1 WITHSCORES
    1) "bing.com"
    2) "8"
    3) "baidu.com"
    4) "9"
    5) "google.com"
    6) "10"
    
    
    # 添加已存在元素,且 score 值不变
    
    redis> ZADD page_rank 10 google.com
    (integer) 0
    
    redis> ZRANGE page_rank 0 -1 WITHSCORES  # 没有改变
    1) "bing.com"
    2) "8"
    3) "baidu.com"
    4) "9"
    5) "google.com"
    6) "10"
    
    
    # 添加已存在元素,但是改变 score 值
    
    redis> ZADD page_rank 6 bing.com
    (integer) 0
    
    redis> ZRANGE page_rank 0 -1 WITHSCORES  # bing.com 元素的 score 值被改变
    1) "bing.com"
    2) "6"
    3) "baidu.com"
    4) "9"
    5) "google.com"
    6) "10"
    

    ZCARD
    ZCARD key

    返回有序集 key 的基数。

    返回值:
    当 key 存在且是有序集类型时,返回有序集的基数。
    当 key 不存在时,返回 0 。

    redis > ZADD salary 2000 tom    # 添加一个成员
    (integer) 1
    
    redis > ZCARD salary
    (integer) 1
    
    redis > ZADD salary 5000 jack   # 再添加一个成员
    (integer) 1
    
    redis > ZCARD salary
    (integer) 2
    
    redis > EXISTS non_exists_key   # 对不存在的 key 进行 ZCARD 操作
    (integer) 0
    
    redis > ZCARD non_exists_key
    (integer) 0
    

    ZCOUNT
    ZCOUNT key min max

    返回有序集 key 中, score 值在 min 和 max 之间(默认包括 score 值等于 min 或 max )的成员的数量。

    返回值:
    score 值在 min 和 max 之间的成员的数量。

    redis> ZRANGE salary 0 -1 WITHSCORES    # 测试数据
    1) "jack"
    2) "2000"
    3) "peter"
    4) "3500"
    5) "tom"
    6) "5000"
    
    redis> ZCOUNT salary 2000 5000          # 计算薪水在 2000-5000 之间的人数
    (integer) 3
    
    redis> ZCOUNT salary 3000 5000          # 计算薪水在 3000-5000 之间的人数
    (integer) 2
    

    ZINCRBY
    ZINCRBY key increment member
    相关命令ZRANGEBYSCORE(返回有序集 key 中,所有 score 值介于 min 和 max 之间(包括等于 min 或 max )的成员。有序集成员按 score 值递增(从小到大)次序排列)

    为有序集 key 的成员 member 的 score 值加上增量 increment 。

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

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

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

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

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

    redis> ZSCORE salary tom
    "2000"
    
    redis> ZINCRBY salary 2000 tom   # tom 加薪啦!
    "4000"
    

    ZRANGE
    ZRANGE key start stop [WITHSCORES]

    返回有序集 key 中,指定区间内的成员。

    其中成员的位置按 score 值递增(从小到大)来排序。

    返回值:
    指定区间内,带有 score 值(可选)的有序集成员的列表。

    redis > ZRANGE salary 0 -1 WITHSCORES             # 显示整个有序集成员
    1) "jack"
    2) "3500"
    3) "tom"
    4) "5000"
    5) "boss"
    6) "10086"
    
    redis > ZRANGE salary 1 2 WITHSCORES              # 显示有序集下标区间 1 至 2 的成员
    1) "tom"
    2) "5000"
    3) "boss"
    4) "10086"
    
    redis > ZRANGE salary 0 200000 WITHSCORES         # 测试 end 下标超出最大下标时的情况
    1) "jack"
    2) "3500"
    3) "tom"
    4) "5000"
    5) "boss"
    6) "10086"
    
    redis > ZRANGE salary 200000 3000000 WITHSCORES   # 测试当给定区间不存在于有序集时的情况
    (empty list or set)
    

    ZRANK
    ZRANK key member
    相关命令zrerank(获得成员按 score 值递减(从大到小)排列的排名)

    返回有序集 key 中成员 member 的排名。其中有序集成员按 score 值递增(从小到大)顺序排列。

    排名以 0 为底,也就是说, score 值最小的成员排名为 0

    返回值:
    如果 member 是有序集 key 的成员,返回 member 的排名。
    如果 member 不是有序集 key 的成员,返回 nil 。
    

    ZREM
    ZREM key member [member ...]

    移除有序集 key 中的一个或多个成员,不存在的成员将被忽略。

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

    返回值:
    被成功移除的成员的数量,不包括被忽略的成员。

    # 测试数据
    
    redis> ZRANGE page_rank 0 -1 WITHSCORES
    1) "bing.com"
    2) "8"
    3) "baidu.com"
    4) "9"
    5) "google.com"
    6) "10"
    
    
    # 移除单个元素
    
    redis> ZREM page_rank google.com
    (integer) 1
    
    redis> ZRANGE page_rank 0 -1 WITHSCORES
    1) "bing.com"
    2) "8"
    3) "baidu.com"
    4) "9"
    
    
    # 移除多个元素
    
    redis> ZREM page_rank baidu.com bing.com
    (integer) 2
    
    redis> ZRANGE page_rank 0 -1 WITHSCORES
    (empty list or set)
    
    
    # 移除不存在元素
    
    redis> ZREM page_rank non-exists-element
    (integer) 0
    

    ZREMRANGEBYRANK
    ZREMRANGEBYRANK key start stop

    移除有序集 key 中,指定排名(rank)区间内的所有成员。

    区间分别以下标参数 start 和 stop 指出,包含 start 和 stop 在内。

    下标参数 start 和 stop 都以 0 为底,也就是说,以 0 表示有序集第一个成员,以 1 表示有序集第二个成员,以此类推。
    你也可以使用负数下标,以 -1 表示最后一个成员, -2 表示倒数第二个成员,以此类推。

    返回值:
    被移除成员的数量。

    redis> ZADD salary 2000 jack
    (integer) 1
    redis> ZADD salary 5000 tom
    (integer) 1
    redis> ZADD salary 3500 peter
    (integer) 1
    
    redis> ZREMRANGEBYRANK salary 0 1       # 移除下标 0 至 1 区间内的成员
    (integer) 2
    
    redis> ZRANGE salary 0 -1 WITHSCORES    # 有序集只剩下一个成员
    1) "tom"
    2) "5000"
    

    ZREMRANGEBYSCORE
    ZREMRANGEBYSCORE key min max

    移除有序集 key 中,所有 score 值介于 min 和 max 之间(包括等于 min 或 max )的成员。

    返回值:
    被移除成员的数量。

    redis> ZRANGE salary 0 -1 WITHSCORES          # 显示有序集内所有成员及其 score 值
    1) "tom"
    2) "2000"
    3) "peter"
    4) "3500"
    5) "jack"
    6) "5000"
    
    redis> ZREMRANGEBYSCORE salary 1500 3500      # 移除所有薪水在 1500 到 3500 内的员工
    (integer) 2
    
    redis> ZRANGE salary 0 -1 WITHSCORES          # 剩下的有序集成员
    1) "jack"
    2) "5000"
    

    相关文章

      网友评论

        本文标题:第五部分:Redis之SortedSet(有序集合)

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