首页 > 数据库 >七、Redis之sorted set

七、Redis之sorted set

时间:2024-10-04 15:23:12浏览次数:8  
标签:分数 ... set min max 元素 Redis key sorted

sorted set也是Redis中常用的类型。可以用来解决热搜,排名前十等问题。

ZADD

ZADD key [NX|XX] [GT|LT] [CH] [INCR] score member [score member ...]

zadd将多个分数和元素对添加到sorted set中。还有些选项影响了zadd的行为:

  • XX: 仅更新已存在的元素。不要添加新元素。
  • NX:只添加新元素。不要更新现有元素。
  • LT:仅在新得分低于当前得分时更新现有元素。此标志不会阻止添加新元素。
  • GT:只有当新分数大于当前分数时,才更新现有元素。此标志不会阻止添加新元素。
  • CH:CH是changed的缩写,返回值表示修改的元素数量。
  • INCR:当指定此选项时,ZADD的行为类似于ZINCRBY。在此模式下只能指定一个分数元素对。

ZCARD

ZCARD key

zcard返回排序集中分数-元素对的数量。

ZCOUNT

ZCOUNT key min max

zcount返回分数在min和max范围(包含两端)内分数-元素对的数量。

ZINCRBY

ZINCRBY key increment member

ZINCRBY将成员的分数递增increment。

ZLEXCOUNT

ZLEXCOUNT key min max

当sorted set中所有的分数都相同时,比较的是元素的字典顺序。ZLEXCOUNT返回元素在min和max范围内分数-元素对的数量

-表示无穷小,+表示无穷大,[表示包含,( 表示不包含。

ZMSCORE

ZMSCORE key member [member ...]

zmscore返回排序集中多个成员对应的分数。

ZRANDMEMBER

ZRANDMEMBER key [count [WITHSCORES]]

zrandmember随机返回count个元素。withscores选项同时返回分数。

ZRANGE

ZRANGE key start stop [BYSCORE|BYLEX] [REV] [LIMIT offset count] [WITHSCORES]

返回存储在的排序集中的指定元素范围(start到stop)。ZRANGE可以执行不同类型的范围查询:按索引(排名)、按分数或按词典顺序。

元素的顺序是从最低到最高的分数。具有相同分数的元素按字典顺序排列。可选的REV参数颠倒了顺序,因此元素从最高分数到最低分数排序,分数关系通过反向词典排序来解决。

zrange默认是按照分数从小到大排序。WITHSCORES选项同时查询出分数。-1表示最后一个元素,-2表示倒数第二个元素。

还可以用[表示包含,(表示不包含。

rev选项就是从大到小排序。

bylex选项就是当所有分数都相同时,按照元素的字段顺序比较。-表示无穷小,+表示无穷大。

最后的limit offset count就是类似sql中的分页参数。

ZRANGEBYLEX

ZRANGEBYLEX key min max [LIMIT offset count]

zrangebylex等同于zrange key min max bylex limit offset count。

ZRANGEBYSCORE

ZRANGEBYSCORE key min max [WITHSCORES] [LIMIT offset count]

zrangebyscore等同于zrange key min max byscore limit offset count。

ZRANGESTORE

ZRANGESTORE dst src min max [BYSCORE|BYLEX] [REV] [LIMIT offset count]

zrangestore的效果类似与将zrange src min max [BYSCORE|BYLEX] [REV] [LIMIT offset count]的结果保存到dst的sorted set中。

如果zset2原来就有数据,执行后zset2的数据会被覆盖。

ZRANK

ZRANK key member [WITHSCORE]

zrank返回member在sorted set中的排名(按照分数从小到大或分数都相同时,按照元素的字典顺序从小到大)。排名第一的返回0.

ZREM

ZREM key member [member ...]

zrem从sorted set中移除多个member。

ZREMRANGEBYLEX,ZREMRANGEBYRANK,ZREMRANGEBYSCORE

ZREMRANGEBYLEX key min max
ZREMRANGEBYRANK key start stop
ZREMRANGEBYSCORE key min max

以上三个命令都是从sorted set中移除指定范围内的元素。ZREMRANGEBYLEX是当所有分数都相同时,移除在指定范围内的所有元素。ZREMRANGEBYRANK是移除指定排名范围内的所有元素。ZREMRANGEBYSCORE是移除指定分数内的所有元素。

ZREVRANGE

ZREVRANGE key start stop [WITHSCORES]

返回存储在key处的排序集中的指定元素范围。这些元素被认为是从最高分数到最低分数排序的。对于得分相等的元素,使用降序词典顺序。

ZREVRANGEBYLEX

ZREVRANGEBYLEX key max min [LIMIT offset count]

当所有元素的分数都相等时,按照元素的字典顺序逆序返回在max到min之间的所有元素。注意:max和min之间的位置。

ZREVRANK

ZREVRANK key member [WITHSCORE]

逆序返回元素在sorted set中的排名。

ZSCAN

ZSCAN key cursor [MATCH pattern] [COUNT count]

zscan的效果类似于hscan。

ZSCORE

ZSCORE key member

zscore返回member在sorted set中的分数。

集合运算

在来看下集合运算:

ZINTER numkeys key [key ...] [WEIGHTS weight [weight ...]] [AGGREGATE SUM|MIN|MAX] [WITHSCORES]
ZINTERCARD numkeys key [key ...] [LIMIT limit]
ZINTERSTORE destination numkeys key [key ...] [WEIGHTS weight [weight ...]] [AGGREGATE SUM|MIN|MAX]

ZDIFF numkeys key [key ...] [WITHSCORES]
ZDIFFSTORE destination numkeys key [key ...]

ZUNION numkeys key [key ...] [WEIGHTS weight [weight ...]] [AGGREGATE SUM|MIN|MAX] [WITHSCORES]
ZUNIONSTORE destination numkeys key [key ...] [WEIGHTS weight [weight ...]] [AGGREGATE SUM|MIN|MAX]

sorted set也是一种set。它的集合运算与set的集合运算基本相似。差别在于sorted set多个了分数。

使用WEIGHTS选项,可以为每个输入排序集指定一个乘法因子。这意味着,在传递给聚合函数之前,每个输入排序集中每个元素的得分都要乘以这个因子。当未给出权重时,乘法因子默认为1。聚合函数是SUM、MIN、MAX。聚合函数处理元素间的分数。SUM是分数相加。min是分数间的最小值。max是分数间的最大值。

当指定aggregate为sum时,求并集后b的分数为5.

当指定weights后,计算分数时要乘以相应的weight。zset4的weight指定为2,zset5的weight指定为1.所有zset4的b计算后的分数为2乘2等于4.大于zset5计算后的分数为3。

ZMPOP,BZMPOP,ZPOPMAX,BZPOPMAX,ZPOPMIN,BZPOPMIN

ZMPOP numkeys key [key ...] MIN|MAX [COUNT count]
BZMPOP timeout numkeys key [key ...] MIN|MAX [COUNT count]

ZPOPMAX key [count]
BZPOPMAX key [key ...] timeout

ZPOPMIN key [count]
BZPOPMIN key [key ...] timeout

ZMPOP从提供的键名列表中的第一个非空排序集中弹出一个或多个元素,这些元素是成员分数对。可以弹出多个元素,但是只从一个key中取。当使用MIN选项时,弹出的元素是第一个非空排序集中得分最低的元素。MAX选项会弹出得分最高的元素。可选的COUNT可用于指定要弹出的元素数量,默认设置为1。BZMPOP是ZMPOP的阻塞版本,如果都没有数据时会阻塞,直到指定的超时时间。ZPOPMAX相当于zmpop max。ZPOPMIN相当于zmpop min。

在第一个控制台运行bzmpop 2000 2 zset6 zset7 min后,在启动另一个控制台,运行zadd zset7 1 a 3 c

再次运行:

标签:分数,...,set,min,max,元素,Redis,key,sorted
From: https://www.cnblogs.com/shigongp/p/18446369

相关文章

  • 【题解】Solution Set - NOIP2024集训Day42 博弈论
    【题解】SolutionSet-NOIP2024集训Day42博弈论https://www.becoder.com.cn/contest/5574https://www.cnblogs.com/CloudWings/p/17813917.html「中山市选2009」谁能赢呢?一道经典的「二分图博弈」在棋盘问题上的应用。https://www.luogu.com.cn/article/h8a79k3i......
  • 【SpringBoot】结合Redis实现缓存
    Redis经常用于缓存。接下来,我们以Springboot框架为例。实现一些Redis的基础操作,创建完SpingBoot项目后,具体步骤如下图:  pom中添加项目依赖<!--Redis缓存--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-re......
  • bitset
    1.位运算的常见函数__builtin_popcount(x)//x二进制内1的个数(unsignedint)__builtin_popcountll(x)//longlong版本__builtin_parity(x)//二进制下的1的个数的奇偶性__builtin_parityll(x)//longlong版本__builtin_ctz(x)//x二进制末尾0的个数__builtin_clz(x)//x二进......
  • redis设计统计用户访问量
    需求:实现某个接口每天调用了多少次,每个用户只记录一次。(例如,统计刷题模块,练题模块,模拟面试模块每天访问量,利于后续针对功能访问量做出其他优化设计。贴子的浏览量)先分析几种不同的方案:方案一:使用Hash哈希结构实现方法:当用户访问网站时,我们可以使用用户的ID作为标识(若用户未......
  • Set<String>和JTextField
    importjavax.swing.;importjava.awt.;importjava.util.HashSet;importjava.util.Set;importjava.util.Timer;importjava.util.TimerTask;publicclassSizeyunsuan{publicstaticvoidmain(String[]args){inti=1;SetgeneratedQuestions=newHashSet&......
  • 六、redis之set
    Redis集合是成员的无序集合。可以用来保存唯一的成员。注意:对于以下的命令,涉及删除成员的,如果集合中的所有元素都被移除,则集合会被删除。如果集合原先不存在,被当作空集合。SADDSADDkeymember[member...]sadd命令将一系列成员添加到set中。SMEMBERSSMEMBERSkeysmemb......
  • Redis 发布订阅模式
    概述Redis的发布/订阅是一种消息通信模式:发送者(Pub)向频道(Channel)发送消息,订阅者(Sub)接收频道上的消息。Redis客户端可以订阅任意数量的频道,发送者也可以向任意频道发送数据。在发送者向频道发送一条消息后,这条消息就会被发送到订阅该频道的客户端(Sub)Redis有两种发布/订阅模式......
  • Redis: Sentinel工作原理和故障迁移流程
    Sentinel哨兵几个核心概念1)定时任务Sentinel它是如何工作的,是如何感知到其他的Sentinel节点以及Master/Slave节点的就是通过它的一系列定时任务来做到的,它内部有三个定时任务第一个就是每一秒每个Sentinel对其他Sentinel和Redis节点执行PING操作(监......
  • 五、redis之hash
    redis的hash类型就是平时说的hash表,字典。类似于Java中的HashMap。可以用来存储对象等结构。现在看下操纵hash类型的命令。HGETHGETkeyfieldhget获取hash中的field字段的值。HSETHSETkeyfieldvalue[fieldvalue...]hset命令将多个fieldvalue键值对设置到key中。......
  • 解决 DedeCMS 报错“Please set ‘request_order’”的问题
    如果你使用的是虚拟主机,无法直接修改 php.ini 文件,可以通过修改DedeCMS的代码来解决这个问题。找到 common.inc.php 文件:打开织梦CMS安装目录下的 include/common.inc.php 文件。修改代码:使用文本编辑器打开 common.inc.php 文件。找到第34行:php ......