zoukankan      html  css  js  c++  java
  • 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]的元素

    返回实际被删除的元素个数
       
  • 相关阅读:
    Java Thread 总结
    用 for/in 在 Java 5.0 中增强循环
    JAVA中synchronized和lock详解
    centos vim的安装目录在哪里
    Cannot add task 'wrapper' as a task with that name already exists.
    servlet的生命周期
    I/O同个文件需要注意的问题
    分治策略---求最大子数组
    Java实现 100!的阶乘
    Java中方法的重载与覆盖(随笔01)
  • 原文地址:https://www.cnblogs.com/martinzhang/p/3397415.html
Copyright © 2011-2022 走看看