• Redis数据结构:加权集合


    加权集合又称为有序集合,首先它是集合,符合去重的特点。另外,通过score设定权重,对集合进行排序。

    添加元素(ZADD)

    1. 可以添加多个元素

    ZADD  key  score1  val1  score2  val2 ...

    例如,添加单词到number

    ZADD  number  1 "one"  2 "two"  3 "three" 

     

    2. 当元素不存在时才添加

    ZADD  key  NX score1  val1  score2  val2 ...

    使用NX保证只有不存在的时候才会插入新的元素

    ZADD  number  NX  1  "one"

    -- 无法插入

    ZADD  number  NX  4  "four" 

    -- 插入成功

    3. 当元素存在时才插入(更新) 

    ZADD  key  XX score1  val1  score2  val2 ...

    使用XX保证存在的时候才会更新元素, 一般用于更新权重 

    ZADD  number  XX  2  "three"

    移除指定的成员(ZREM)

    使用ZREM移除一个或多个元素

    ZREM  key  val1 [val2...]

    删除two

    ZREM  number  "two" 

    删除指定范围的元素(ZREMRANGEBYRANK,  ZREMRANGEBYSCORE)

    删除指定排名范围的元素

    ZREMRANGEBYRANK  key  start  end

    删除指定权重范围的元素

    ZREMRANGEBYSCORE  key  min  max 

    获取指定元素的权重 (ZSCORE

    使用ZSCORE可以获取到指定元素的权重

    ZSCORE  key   val

    例如,获取three的权重

    ZSCORE  number  "three" 

    调整权重大小(ZINCRBY)

    ZINCRBY  key  increment  val 

    increment为正表示增加,反之表示减少

    ZINCRBY  number  2  "two" 

    -- two的权重+2

    ZINCRBY  number  -2  "two"  

    -- two的权重-2

     

    获取集合的元素个数 (ZCARD)

    ZCARD  key

    获取排名(ZRANK,  ZREVRANK) 

    升序排列后的排名用ZRANK,反之用ZREVRANK

    ZRANK  key  val

    ZREVRANK  key  val 

    结果范围是0~ZCARD - 1, 排序规则采用score值升序(ZRANK)或降序 (ZREVRANK)

    获取指定范围排名的元素或带权重的元素 (ZRANGE, ZREVRANGE)

    ZRANGE  key  start  end  [WITHSCORES]

    ZREVRANGE  key  start  end  [WITHSCORES] 

    前者使用升序,后者使用降序。

    WITHSCORES为可选的,带上这个参数会一起返回权重,不带参数只返回值。

    start和end是索引范围 0~ZCARD - 1

    获取指定权重范围内的元素(ZRANGEBYSCORE, ZREVRANGEBYSCORE)

    ZRANGEBYSCORE  key  minScore  maxScore  [LIMIT  offset  count]

    ZREVRANGESCORE  key  maxScore  minScore  [LIMIT  offset  count] 

    1. 前置是升序,后者是降序

    2. 注意参数的顺序,升序时min在前,max在后,降序时相反

    3. LIMIT用于限定返回的条数

    4. ZRANGEBYSCORE  key  (minScore  maxScore  表示(minScore, maxScore]

    5. minScore和maxScore可以使用-inf和+inf表示无穷大

    统计指定权重范围的元素个数(ZCOUNT)

    ZCOUNT  key  min  max

    统计指定范围的元素个数,min和max的使用与ZRANGEBYSCORE类似

    交集、并集(ZINTERSTORE,  ZUONIONSTORE)

    使用方法与集合类似,但是涉及权重的计算

    ZINTERSTORE  numbers  set1  set2  [set3...]   AGGREGATE  [SUM|MIN|MAX]

    numbers表示集合的数量

    默认采用权重相加,也可以自己指定

    也可以指定新的权重计算(这个权重是集合的权重): score1 * a + score2 * b + score3 * c

    ZUNIONSTORE  numbers  set1  set2  [set3...]  WEIGHTS  score1  score2  [score3...]

    权重相同的有序集合

    对于权重相同的有序集合的排序采用的是字典序。

    1. 获取指定范围的字典序元素

    ZRANGEBYLEX  key  min  max [LIMIT offset count]

    min和max表示范围,可选-表示负无穷,+表示正无穷,(和[表示闭、开 , LIMIT可以限制个数

    例如

    ZRANGEBYLEX  key  (a +

    ZRANGEBYLEX  key  [a (b

     

    2. 逆序获取指定范围的字典序元素

    ZREVRANGEBYLEX  key  max  min  [LIMIT offset count]

    3. 统计指定范围的元素数

     ZLEXCOUNT  key  min  max

    4. 删除指定范围的数据 

    ZREMRANGEBYLEX  key  min  max

    弹出最大,弹出最小

    移除权重最大或最小的N个元素 

    ZPOPMAX  key  N

    ZPOPMIN  key  N

    不指定N就只弹出1个

    阻塞弹出 

    BZPOPMAX  set1  set2 [set3...]  timeout

    BZPOPMIN  set1  set2  [set3...]  timeout 

    阻塞,直到可用或超时 

  • 相关阅读:
    自定义Dynamics 365实施和发布业务解决方案 - 6. Azure集成
    STM32寄存器总结
    [SDM450][Android9.0] 禁止第一次使用谷歌拼音输入法弹出申请使用联系人弹框
    IT学习笔记--Flink
    DGIOT数字工厂整体结构介绍
    交通信号标志识别系统 python 深度学习 YOLOv5
    dmesg 崩溃分析
    cpu设计和实现(流水线暂停)
    基于微调技术打造自己的私有LLM大模型
    【需要打开多少监视器】Python 实现
  • 原文地址:https://blog.csdn.net/Day_and_Night_2017/article/details/126477015