Redis学习笔记(七)——Redis常用命令入门——有序集合类型

12-Redis 有序集合类型实战指南:从分数排序到排行榜场景落地 本文围绕 Redis 有序集合类型(zset)展开:首先解析其底层 “哈希表 + 跳表” 的实现逻辑,阐述 “元素唯一、分数有序、O (logn) 操作效率” 的核心特性,对比有序集合与列表、集合类型的差异以明确适用边界;接着详解 9 大类核心命令的格式、实操案例与注意事项;然后结合排行榜功能、文章按访问量排序、定时任务调度 3 类典型场景说明应用方法;最后给出混淆排序方向、忽略分数边界符号等 4 类新手避坑方案,助力读者掌握有序集合在 “排序 + 权重存储” 场景中的高效用法。 阅读详情

六、有序集合类型

上节我们一起学习了集合类型,感受到了redis的强大。现在我们接着学Redis的最后一个类型——有序集合类型。

有序集合类型,大家从名字上应该就可以知道,实际上就是在集合类型上加了个有序而已。Redis中的有序集合类型,实际上实在集合类型上,为每个元素都关联一个分数,有序实际上说的是分数有序,我们根据分数的范围获取集合及其他操作。集合的元素依然是不能够相同的,但是分数可以相同。

下面列举有序金额和类型和列表类型的相似处:

①两者都是有序的(废话!)

②两者都可以获得某一范围的元素

下面列举区别:

①列表是链表实现的,靠近两边的数据读取极快,而元素过多后获取中间元素的速度则会很慢;有序集合类型使用的散列表和跳跃表(Skip list)实现的,所以读取哪部分的数据都差不多(时间复杂度是O(logN))。

②列表中不能简单的调整元素的位置,但是有序集合可以(通过改变分数)。

③有序集合比列表费内存(要存储分数、散列、跳跃表)。

下面我们来一起学习命令(这里参数关键字都比较多,所以下面开始列举的命令,关键字都使用大写)。

1、增加元素

ZADD命令是向集合中增加元素的命令,往集合中增加分数为score的member,这里也是可以一次增加多个值,返回值是成功增加的元素的个数,如果member存在,则score会覆盖原有的分数。

我们发现Peter的分数录入错了,需要修改为76分,这时候我们接着执行下面的命令。

这里分数不仅仅支持整数,还支持浮点数。

其中+inf和-inf是正负无穷的意思。

2、获得元素的分数

3、获得排名在某个范围的元素列表

ZRANGE命令会按照元素分数的从小到大顺序返回索引从start到stop之间所有的元素(包含两端)。ZRANGE与LRANGE命令相似,索引从0开始,负数一样代表从后向前查找(-1是最后一个)。WITHSCORE代表是否加上分数。

ZRANGE命令的时间复杂度为O(longN+m),其中n为有序集合的基数,m为返回的元素个数。如果遇到分数相同的情况,Redis会按照字典顺序(即”0″<…<”9″<”A”<…<”Z”<”a”<…<”z”这样的顺序)进行排列。如果是中文,也会按照编码之后的字典顺序排序。

ZREVRANGE命令和ZRANGE命令唯一不同的是ZREVRANGE命令是按照分数从大到小给出顺序结果。

4、获得指定分数范围的元素

这个命令参数很多,但是都很好理解。这个命令用来获取指定分数范围的元素,min是最小值,max是最大值,WITHSCORE还是和上面介绍的一样,LIMIT是为了指定偏移量及数量的,和sql的有点像。offset是偏移量,count是数量。同时这些min和max都是包含的,如果要想不包含,需要使用“(”符号。

5、增加某个元素的分数

这个命令可以增加一个元素的分数,返回值是更改后的分数。这里就不再赘述用法了,和INCRBY命令类似。同样如果不存在会初始为0在增加,负数即是减小。

6、获得集合中元素的数量

这个命令和SCARD类似,也就不多说了。

7、获得指定分数范围的元素个数

这里就是获得min和max分数之间的元素数,当然这里也支持“(”符号。

8、删除一个或多个元素

返回值是成功删除的元素的个数。

9、按照排名范围删除元素

这个命令按照元素分数从小到大顺序删除指定范围内所有的元素(其实就是先排序,然后按照排好的序列的索引删除),并返回删除的元素的数量。

10、按照分数范围删除元素

这里就是直接删除分数范围的元素了,这里分数同样支持“(”符号,返回删除数量。

11、获得元素的排名

ZRANK命令按照元素分数的从小到大的顺序获得制定元素的排名(第一个从0开始),ZREVRANK则相反。

 

最后我们举个实际应用的例子。

我们把wordpress的文章按点击率排序,关系数据库我们是遍历所有的文章排序点击数,如果使用Redis,我们需要一个posts:page.view键的有序集合类型,然后每个member为文章ID,score为文章的点击量。这样我们就可以用ZREVRANGE命令获取点击量排行榜。

还有一个实际的例子,我们用有序集合类型保存文章的发布时间(时间用UNIX时间及时间的毫秒数)与文章ID,这样我们可以很方便的按时间来查看文章列表,我们的文章列表应该是用文章发布时间排序而不应该用文章ID排序的。

到这里所有的数据类型就都介绍完了。大家学的怎么样了呢?

2024从零开始使用VSCode编程(静态页面制作篇)HTML+CSS+JS阶段 VSCode第一个前端静态页面的编写 阅读详情

相关推荐

SVPWM分析、各个扇区详细计算以及Matlab仿真

SVPWM分析以及各个扇区详细计算以及Matlab仿真说明目的两电平逆变器拓扑空间矢量扇区判断扇区内如何发波?矢量作用时间计算矢量切换时间的计算Simulink仿真/基于Matlab-R2014a版本 说明 第一次发文章,不太会用Markdown,word编辑的公式复制过来有些是乱码,因此都贴图了。 另外,本文公式和图片比较多,编辑工作量比较大,比较辛苦,转载的话,请注明出处,谢谢。 目的 由于在...

michaelf的博客 12万+

redis详解-(7)有序集合

上一篇介绍了redis的无序集合set,本篇介绍redis的有序集合sortedset。和set集合类似,sortedset是有序的去重的,元素是字符串类型。 每一个元素都关联着一个浮点数分值(score),并按照分值从小到大的顺序排列集合中的元素,分值可以相同。 一个集合最多包含2的32次方减1个元素。一个保存了水果价格的有序集合 分值 2.8 3.5 4.3 6.8

jinjin603的博客 1229

别再为镜面物体检测发愁了!手把手教你用PMD相位偏折术增强2.5D形状图细节(附Python代码)

本文详细解析了PMD相位偏折术在工业视觉中镜面物体检测的应用,通过2.5D成像方案增强形状图细节。文章提供了Python代码示例,介绍了一种计算高效的局部特征增强算法,帮助解决产线环境中的噪声问题,提升缺陷识别准确率。

weixin_29299807的博客 346

redis的有序集合在score相同的情况 下是如何排序的

前两天倒腾redis的有序集合时,自己发现了一个问题,redis的有序集合在score相同的情况 下是如何排序的? 通过谷歌搜索,发现了一些线索,在score相同的情况下,redis使用字典排序,不过不是太明白什么是字典排序(这就是非科班出生的悲哀),于是自己测试了一下,相信下面的截图就能回答博文开头的问题了: 在score相同的情况下,redis使用字典排序,而所谓的字典排序其实就是“A

且行且吟 2万+

深入理解梅尔刻度、梅尔滤波器组和梅尔时频谱图

读取一段音频,使用短时傅里叶变换,得到普通的时频谱图,然后绘制梅尔滤波器组,值得注意的是,librosa的梅尔滤波器组函数还带有权重归一化功能,即对一个三角形滤波器的每个权重,都除以该三角形的面积,如果不希望进行该归一化,设置参数。从公式可见,对数部分可以以自然对数为底数,也可以以10为底数,不同的底数对应不同的系数,要确定当前的系数,只需要代入(1000Hz, 1000mel)即可。其中,m是当前滤波器的序号,表征了当前的时间段,k是当前频率的序号,表征了当前正在对哪一频率的。

DEDSEC_Roger的博客 1万+

摄像头模组CCM简介

摄像头模组,全称Camera Compact Module,简写为CCM。CCM 包含几大件: 镜头(lens)、音圈马达(VCM)、传感器(sensor)、软板(FPC)、图像处理芯片(DSP)。工作原理:物体通过镜头(lens)聚集的光,通过CMOS或CCD集成电路,把光信号转换成电信号,再经过内部图像处理器(ISP)转换成数字图像信号输出到数字信号处理器(DSP)加工处理,转换成标准的GRB、YUV等格式图像信号。摄像头模组主要由以下几个部分组成:镜头(Lens):将光线汇聚到图像传感器上。

m0_73482095的博客 1万+

Redis学习笔记(六)类型之有序集合

有序集合类型(sorted set),在集合类型的基础上,为集合中的每个元素都关联了一个分数。支持获得分数最高(或最低)的前N个元素、获得指定分数范围内的元素等与分数有关的操作。 有序集合类型使用散列表和跳跃表实现的。   命令: 1、有序集合增加元素 ZADD key score member [score member ...] 如果元素已经存在,则修改元素的分数。分数不仅可以是整

守love唯诺的专栏 457

完整内、外期货量化交易系统源码可售

支持客户登录校验,支持所有的实时行情和汇总报价功能、实时资讯(报价,列表,分时,分钟成交明晰,),多线程支持盘后收盘作业下载(日线,5分钟线,15分钟, 30分钟,60分钟线,),支持从服务器下载相关运行配置(来自服务器动态配置信息,如收盘日期等),实现状态条显示。收盘作业包括日线、5分钟线、15分钟线、30分钟、60分钟线、2小时线、4小时线每日分时走势。综合信息栏显示用户账户信息、合约信息、当日委托单记录、当日成交记录、当日平仓记录、当日跟单记录、当日(月/周)排行榜、下单栏、持仓信息;

qq_35600909的博客 1805

Redis学习笔记之七:有序集合类型

Redis最后一种类型是有序集合类型ZSet,即排序的Set,但又与Set不同的是,它比Set多一个字段分数(score)用于排序等操作,从这点来看,相当于Java中的TreeMap,但与Java的TreeMap不同的是,TreeMap排序是指定Comparator对象来排序,通过比较Key来排序,最后构成一棵树。而Redis的ZSet在存储结构上类似于Set。     1、设值/取值

yamikaze的博客 3393

【JTAG】1149.6协议详解

JTAG1149.6协议是1149.1协议中Boundary-Scan结构的扩展,1149.1对交流耦合、差分或两者兼有的情况并没有得到充分的处理。该协议支持新的I/O测试结构。需要时变(AC)信号的高级I/O引脚允许测试它们之间的连接,这包括所有差分信号引脚或单端信号引脚,通过设计支持交流耦合。..................

xuhe0206的博客 4574

Python爬虫 汽车之家 车型销量--参数分析与实现

【代码】Python爬虫 汽车之家 车型销量--参数分析与实现。

2201_76125393的博客 850

Redis简单入门常用命令

了解Redis 使用Redis 掌握Redis

2301_82119611的博客 1458

UNet 改进(22):结合Transformer结构

保留了UNet的经典编码器-解码器结构在瓶颈层使用Transformer替代传统的卷积层采用跳跃连接保持空间细节信息使用双卷积块(DoubleConv)作为基础构建模块。

2401_82355416的博客 774

Redis(七) zset有序集合类型

redis 有序集合类型

不能再留遗憾了的博客 1162

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

Redis的入门介绍

对Redis进行了入门介绍

weixin_49429082的博客 992

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

Redis基础入门

简单介绍一下redis:redis是一种键值类型的数据库,我们之前学过mysql,mysql也是数据库,他们之间的区别是,redis把数据存储在磁盘中,redis把数据存储在内存中,mysql是二维表类型的数据库;leftPush向头部插入一个数据,leftPushAll插入多个,range获取指定范围的元素,rightPop删除尾部的元素,size获取列表的长度。put就是hset,delete就是hdel,get就是hget,keys,values就是hkeys,hvalues;del:删除key;

2301_79748665的博客 1554

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

从入门到入土,万字超详细Redis学习笔记 【基础篇】+【实战篇】

从入门到入土,万字超详细Redis学习笔记 【基础篇】+【实战篇】 文章目录从入门到入土,万字超详细Redis学习笔记 【基础篇】+【实战篇】redis通用命令resp图形化界面连接redisString类型的常用命令key的层级结构Hash类型的常见命令LIst类型的常见命令Set类型的常见命令SortedSet类型常用命令Redis的java客户端JedisJedis连接池SpringDataRedisRedis的实战运用场景基于Redis实现共享session登录Redis缓存缓存更新策略缓存穿透缓存

weixin_67774087的博客 1747

Redis常用命令(超详细整理)

Redis常用命令(超详细整理)

mh17680313750的博客 9311

【JavaWeb后端学习笔记】Redis常用命令以及Java客户端操作Redis

redis是基于内存的key-value结构的数据库。

wrjwww的博客 1379

Redis 学习笔记 | 常用命令

【代码】Redis 学习笔记 | 常用命令。

2302_77250325的博客 1246

Redis入门

Redis入门——常用命令、SpringDataRedis的使用

LIPAH的博客 2882

0.5、Redis学习-有序集合类型及主要命令行

前言 体能状态先于精神状态,习惯先于决心,聚焦先于喜好。 Redis 官方完整的命令行文档 https://redis.io/commands 本文实验 Redis 版本为3.2.100 在Redis 2.6版本及之前,有些命令是不被支持的,建议读者安装2.6之后的版本。 命令行中 key 表示 key的name,在实际使用中对应 key的名字。 [] 表示被其包括的命令可有可无。 命...

༺ bestcxx的专栏 ༻ 521

redis常用命令汇总

redis的命令你还在到处翻找吗?这里的命令足够你平时用了,快来联系一下吧

qq_44794280的博客 2万+

【Redis】redis入门+java操作redis

前言:redis入门操作、数据类型、常用命令以及在java中操作Redis

春天的波菜 3994

redis基础学习笔记

1. 单机MySQL的年代90年代,一个基本的网站访问量一般不会太大,单个数据库完全足够!那个时候,更多的去使用静态网页 Html~服务器根本没有太大的压力!思考一下,这种情况下 : 整个网站的瓶颈是什么?数据量如果太大,一个机器放不下数据的索引(B+ Tree),一个机器内存也放不下访问量(读写混合),一个服务器承受不住2. Mencached(缓存)+MySQL+垂直拆分(读写分离)站80%的情况都是在读,每次都要去查询数据库的话就十分的麻烦!

weixin_43977307的博客 1908

Redis 有序集合类型常用命令及其示例(5)

Redis 有序集合类型常用命令及其示例

Mr.L的博客 536
上一篇: Redis学习笔记(六)——Redis常用命令入门——集合类型
下一篇: Redis学习笔记(八)——事务入门
大树叶
博客等级 码龄12年 1171粉丝 664原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值