redis_zset

Zset

  • 集合中不能有重复元素

  • 集合中的元素可以排序,每个元素设置一个分数(score)作为排序的依据. score可以重复。

  • 1:集合内

    • 添加成员 zadd key score member [score member ...]

      127.0.0.1:6379> zadd user:ranking 250 tom   #向有序集合user:ranking 添加用户tom和分数250
      (integer) 1
      127.0.0.1:6379> zadd user:ranking 1 kris 91 mike 200 frank  220 tim  250 martin
      (integer) 5
      
      new特新:
      nx:member不存在,则设置成功
      xx:member必须存在,用于更新
      ch:返回此次操作后,有序集合元素和分数发生变化的个数
      incr:对score做增加
      
      #O(log(n))
      
    • 计算成员个数 zcard key

      127.0.0.1:6379> zcard user:ranking
      (integer) 6
      
    • 计算某个成员的分数 zscore key member

      127.0.0.1:6379> zscore user:ranking mike
      "91"
      
    • 计算成员的排名

      • zrank key member --从低到高
      • zrevrank key member --从高到低
      127.0.0.1:6379> zrank user:ranking tom
      (integer) 5
      127.0.0.1:6379> zrevrank user:ranking tom   #排名从0开始计数
      (integer) 0
      
    • 删除成员 zrem key member

      127.0.0.1:6379> zrem user:ranking mike
      (integer) 1
      
    • 增加成员的 分数 zincrby key increment member

      127.0.0.1:6379> zincrby user:ranking 9 tom   #给tom加9分
      "259"
      
    • 返回指定排名范围的成员

      • zrange key start end [withscores]
      • zrevrange key start end [withscores]
      127.0.0.1:6379> zrange user:ranking 0 2 withscores
      1) "kris"
      2) "1"
      3) "frank"
      4) "200"
      5) "tim"
      6) "220"
      
      127.0.0.1:6379> zrevrange user:ranking 0 2  withscores
      1) "tom"
      2) "259"
      3) "martin"
      4) "250"
      5) "tim"
      6) "220"
      
    • 返回指定分数范围的成员

      • zrangebyscore key min max [withscores] [limit offset count]

      • zrevrangebyscore key min max [withscores] [limit offset count]

        127.0.0.1:6379> zrangebyscore user:ranking 200 221 withscores
        1) "frank"
        2) "200"
        3) "tim"
        4) "220"
        
        #min,max 支持(开区间),[闭区间]
        #-inf 无限小
        #+inf 无限大
        127.0.0.1:6379> zrangebyscore user:ranking (200 +inf  withscores
        1) "tim"
        2) "220"
        3) "martin"
        4) "250"
        5) "tom"
        6) "259"
        
      • 返回指定分数范围成员的个数 zcount key min max

        127.0.0.1:6379> zcount user:ranking 200 221
        (integer) 2
        
      • 删除指定排名内的升序元素 zremrangebyrank key start end

        127.0.0.1:6379> zremrangebyrank  user:ranking  0 2
        (integer) 3
        
        
        127.0.0.1:6379> zrangebyscore user:ranking -inf  +inf  withscores  #查看所有成员
        1) "martin"
        2) "250"
        3) "tom"
        4) "259"
        
      • 删除指定分数范围内的成员 zremrangebyscore key min max

        127.0.0.1:6379> zremrangebyscore  user:ranking  (250  +inf  
        (integer) 1
        
    • 集合间的操作

      • 两个集合

      • 127.0.0.1:6379> zadd user:ranking:1  1 kris  91 mike  220  frank 220  tim 250 martin  251  tom 
        (integer) 6
        
        127.0.0.1:6379> zadd user:ranking:2  8 james  77 mike  625 martin  888 tom
        (integer) 4
        
        127.0.0.1:6379> keys *
        1) "user:ranking:1"
        2) "user:ranking:2"
        
        • 交集

        • zinterscore destination numkeys key1 [key2 ....] [weights weight1 [weight2 ...] ] [aggregate sum| min | max]

        • numkeys 代表key1,key2的总数

        • weights 权重, weight1 对应key1的权重,weight2对应key2的权重,默认值是1.

        • aggregate:聚合,计算交集后做汇总,默认是sum

          127.0.0.1:6379> zinterstore user:ranking:1_2_inter  2  user:ranking:1  user:ranking:2  weights  1  1  
          (integer) 3
          127.0.0.1:6379> keys *
          1) "user:ranking:2"
          2) "user:ranking:1_2_inter"
          3) "user:ranking:1"
          
          #查看一下交集的成员
          127.0.0.1:6379> zrange  user:ranking:1_2_inter 0 -1 withscores
          1) "mike"
          2) "168"
          3) "martin"
          4) "875"
          5) "tom"
          6) "1139"
          
          
          
        • 并集

        • zunionscore destination numkeys key1 [key2 ....] [weights weight1 [weight2 ...] ] [aggregate sum| min | max]

      • 内部编码

      • ziplist(压缩列表):zset类型元素个数<hash-max-ziplist-entries(default128) 或者 所有的值<hash-max-ziplist-value(64字节) 同时满足以上2个条件,则使用更加紧凑的ziplist实现多个元素的连续存储。

      • skiplist(跳跃表):

posted @ 2020-06-15 16:27  Noob52037  阅读(87)  评论(0编辑  收藏  举报