七、Redis之sorted set

news/2024/12/22 0:12:50/文章来源:https://www.cnblogs.com/shigongp/p/18446369

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 ...] timeoutZPOPMIN 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

再次运行:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/807931.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

SQL--约束,范式

约束 唯一约束 一个表可以多个字段加 值唯一性 非空约束 一个表可以多个字段加 值不能为空 主键约束 一个表只有一个字段可以加 值不能为空 值必须唯一性 自增约束 数据类型 数值类型 一般配合#键约束使用 默认约束 一个表可以多个字段加 没有给值的时候 使用…

【SpringBoot】结合Redis实现缓存

Redis经常用于缓存。接下来,我们以Springboot框架为例。实现一些Redis的基础操作,创建完SpingBoot项目后,具体步骤如下图: pom中添加项目依赖<!-- Redis 缓存--> <dependency><groupId>org.springframework.boot</groupId><artifactId>sprin…

探索JVM的垃圾回收(堆内存)

Java 8+ -序章 在 C/C++ 语言中,程序员自己分配内存、回收内存,不存在垃圾回收一说。 而在 Java 中,内存分配 绝大多数 是 JVM 的工作——栈内存、堆内存、永久代/元空间 等。ben发布于博客园 内存分配了就完了吗?不。JVM 运行时 的 内存不是无限的,受制于 程序员配置、系…

扩散引导语言建模(DGLM):一种可控且高效的AI对齐方法

随着大型语言模型(LLMs)的迅速普及,如何有效地引导它们生成安全、适合特定应用和目标受众的内容成为一个关键挑战。例如,我们可能希望语言模型在与幼儿园孩子互动时使用不同的语言,或在撰写喜剧小品、提供法律支持或总结新闻文章时采用不同的风格。 目前,最成功的LLM范式是训练…

day9[探索 InternLM 模型能力边界]

Bad Case 1:模型服务来源 https://opencompass.org.cn/arena您的输入 10月中旬去北京穿什么衣服模型A internlm2.5-20b-chat模型B Doubao-pro-32k/240828 (字节豆包)模型A输出|| 模型B输出 | | | 其他补充 | xxxx | Bad Case 2:模型服务来源 https://opencompass.org.cn/are…

(七)项目实战01-框架说明

全局通讯直接写入数据模型Model

卸载时报错:‘’系统找不到指定的驱动器‘’问题处理

操作系统:win11 问题描述:wegame,英雄联盟我早就卸载过了,今天在 设置/应用/安装的应用 这里又看见了,在此处点击卸载,报如下错误:解决办法: 查了一下网上的做法,大多数是删除注册表,我也试了几个,结果还是没有用。 最后灵机一动,记得控制面板那边也有卸载应用的位置…

[leetcode 25]. K 个一组翻转链表

题目描述: https://leetcode.cn/problems/reverse-nodes-in-k-group 给你链表的头节点 head ,每 k 个节点一组进行翻转,请你返回修改后的链表。 k 是一个正整数,它的值小于或等于链表的长度。如果节点总数不是 k 的整数倍,那么请将最后剩余的节点保持原有顺序。 你不能只是…

高三鲜花 #1

flower #1国庆假期,好像因为教育厅进行了一些非常厉害的操作,导致衡中强制放了一周的假。当然有不少人是自愿留校,也有不少人是在家里歇两天就回学校的,我嘛比较摆了就,直接过一整个国庆( 已经经历了一个月的高三生活了。和我之前想象的一样,进入高三后每天晚上我的脑中…

Maven的下载安装(2024最新详细版~)

1. 1、进入Maven的官网地址,下载: Maven – Download Apache Maven2. 解压安装包到自己的安装目录3. 配置环境变量3.1配置到系统Path中3.2验证安装mvn -version 4. 本地仓库和Settings文件配置 4.1、创建自定义仓库,修改settings文件5. AI大模型手册

java 反序列化 cc6 复现

cc6复现环境:common-collections版本<=3.2.1,java版本随意. 我们观察java高于8u71的版本会发现sun.reflect.annotation.AnnotationInvocationHandler类被进行了修改,其中的readObject不去调用setvalue方法,而是创建了一个LinkedHashMap var7去重新进行操作,使我们之前的利用…