• Redis 的 Sorted Set 有序集合命令


    原文地址 Redis 的 Sorted Set 有序集合命令

    Sorted Set 是 Set 的一个升级版本,它在 Set 的基础上增加了一个顺序属性,这一属性在添加修改元素的时候可以指定,每次指定后,zset 会自动重新按新的值调整顺序。可以理解为有两列的 mysql 表,一列存 value,一列存顺序。操作中 key 理解为 zset 的名字。

     Sorted Set 有序集合
    添加一个元素>zadd myzset 1 one
    向 myzset 集合添加一个顺序号为 “1” 的元素“one”
    注: 1. 集合中的元素值是唯一的 (不允许重复,也没有重复)。
        2. 重复添加某元素时,虽返回 0,但实际会更新了此元素的顺序号值。
        3. 顺序号值允许重复,即同一顺序号值可以对应多个的元素值 (多个元素值可以对应同一顺序号)。
    使某元素的顺序号自增>zincrby myzset 1 three  使元素 “three” 的顺序号值 + 1
    >zincrby myzset 3 three  使元素 “three” 的顺序号值 + 3
    >zincrby myzset -2 three 使元素 “three” 的顺序号值 - 2
    注: 1. 给正值就自加,给负值就自减;
        2. 若给的元素值不存在,则会将其序号值设为 0,然后再运算。
    返回:返回自增 (自减) 运算后的结果值
      
    部分获取集合元素
    注:range 是通过 (下标) 索引偏移获取元素
    >zrange myzset 0 -1 withscores
    1) "one"
    2) "1"
    3) "file"
    4) "2"
    5) "three"
    6) "4"
    7) "seven"
    8) "7"
    获取全部元素,并附带序号;排序:zrange 将顺序号按从 “小 -> 大”排序
    >zrange myzset 2 -3 withscores
    获取下标 (索引) 从第 2 个偏移到第 - 3 个偏移的元素
    注:第一个偏移从首 0 计数 (需 n1>=0),第二个偏移正负均可 (首、尾偏移值均为 - 1);
    >zrevrange myzset 0 -1 withscores
    1) "seven"
    2) "7"
    3) "three"
    4) "4"
    5) "file"
    6) "2"
    7) "one"
    8) "1"
    获取全部元素,并附带序号;排序:zrevrange 将顺序号按从 “大 -> 小”排序
    >zrevrange myzset 1 -2 withscores
    1) "three"
    2) "4"
    3) "file"
    4) "2"
    先按顺序号从 “小 -> 大”排序
    然后指定 “顺序号区间” 获取元素
    注:by score 按顺序号取元素
    >zrange myzset 0 -1 withscores
    1) "one"
    2) "1"
    3) "file"
    4) "2"
    5) "three"
    6) "4"
    7) "seven"
    8) "7"
    >zrangebyscore myzset 4 6 withscores
    1) "three"
    2) "4"
    求顺序号介于 4~6 区间元素,只有一个 “three” 符合条件 (range 默认按序号由小 -> 大排序)
    >zrangebyscore myzset 4 7 withscores
    1) "three"
    2) "4"
    3) "seven"
    4) "7"
    求顺序号介于 4~7 区间元素,有一个 “three” 和“seven”符合条件 (range 默认按序号由小 -> 大排序)
    先按顺序号从 “大 -> 小”排序
    然后指定 “顺序号区间” 获取元素
    注:by score 按顺序号取元素
    >zrevrange myzset 0 -1 withscores
    1) "seven"
    2) "7"
    3) "three"
    4) "4"
    5) "file"
    6) "2"
    7) "one"
    8) "1"
    >zrevrangebyscore myzset 7 4 withscores
    1) "seven"
    2) "7"
    3) "three"
    4) "4"
    求顺序号介于 7~4 区间元素,有一个 “seven” 和“three”符合条件 (range 默认按序号由大 -> 小排序)
      
    先按顺序号从 “小 -> 大”排序,
    然后获取 “指定元素” 的下标 (索引) 值
    rank [ræŋk] 次序,顺序
    >zrange myzset 0 -1 withscores
    1) "one"
    2) "1"
    3) "file"
    4) "2"
    5) "three"
    6) "4"
    7) "seven"
    8) "7"
    >zrank myzset one     获取元素 “one” 的下标 (索引) 值
    (integer) 0
    >zrank myzset three   获取元素 “three” 的下标 (索引) 值
    (integer) 2
    注:zrank 先将集合按顺序号按 “小 -> 大”排序,然后取元素在集合中的下标 (索引) 顺序,类似数组下标从 0 开始计数,one 和 three 的下标 (索引) 值分别是 0 和 2,序号值分别是 1 和 4。元素下标 (索引) 值 同 元素顺序号值是两个概念。
    先按顺序号从 “大 -> 小”排序,
    然后获取 “指定元素” 的下标 (索引) 值
    rank [ræŋk] 次序,顺序
    >zrevrange myzset 0 -1 withscores
    1) "seven"
    2) "7"
    3) "three"
    4) "4"
    5) "file"
    6) "2"
    7) "one"
    8) "1"
    说明:zrevrange 将序号 score 值从大到小排序
    >zrevrank myzset one
    (integer) 3
    >zrevrank myzset three
    (integer) 1
    one 和 three 的下标 (索引) 值分别是 3 和 1
      
    返回给定元素对应的顺序号>zscore myzset three
    "4"
      
    先按顺序号从 “小 -> 大”排序,
    返回给定” 顺序号区间 “的元素个数
    >zrange myzset 0 -1 withscores
    1) "one"
    2) "1"
    3) "file"
    4) "2"
    5) "three"
    6) "4"
    7) "seven"
    8) "7"
    >zcount myzset 2 3
    (integer) 1
    >zcount myzset 2 4
    (integer) 2
    >zcount myzset 2 5
    (integer) 2
    >zcount myzset 2 6
    (integer) 2
    >zcount myzset 2 7
    (integer) 3
    获取集合中元素总个数>zcard myzset
    返回集合中的元素总个数;
      
    按元素名称删除元素>zrem myzset two
    从 myzset 集合中删除指定元素 “two”, 对应序号被一起删除
    >zrem myzset four six
    一次删除多个元素
    返回实际被删除的元素个数
    先按顺序号从 “小 -> 大”排序,
    按索引 (下标) 区间删除元素
    >zremrangebyrank myzset 1 1
    删除索引 (下标) 区间在 [1,1] 的元素,即删除下标为 1 的元素
    >zremrangebyrank myzset 2 4
    删除索引 (下标) 区间在 [2,4] 的元素
    返回实际被删除的元素个数
    先按顺序号从 “小 -> 大”排序,
    按顺序号区间删除元素
    >zremrangebyscore myzset 2 2
    (integer) 1
    删除顺序号区间在 [2,2] 的元素,即:删除顺序号为 2 的元素。
    >zremrangebyscore myzset 2 4
    删除顺序号区间在 [2,4] 的元素
    返回实际被删除的元素个数
      
  • 相关阅读:
    nyoj 329 循环小数【KMP】【求最小循环节长度+循环次数+循环体】
    转 :hdoj 4857 逃生【反向拓扑】
    hdoj 3342 Legal or Not【拓扑排序】
    hdoj 2094 产生冠军
    poj 1789 Truck History【最小生成树prime】
    转:【拓扑排序详解】+【模板】
    hdoj 1285 确定比赛名次【拓扑排序】
    poj 2031 Building a Space Station【最小生成树prime】【模板题】
    zzuoj 10408: C.最少换乘【最短路dijkstra】
    [LC] 232. Implement Queue using Stacks
  • 原文地址:https://www.cnblogs.com/hanlk/p/14161019.html
Copyright © 2020-2023  润新知