论坛
潜水/灌水快乐,沉淀知识,认识更多同行。
ToB圈子
加入IT圈,遇到更多同好之人。
朋友圈
看朋友圈动态,了解ToB世界。
ToB门户
了解全球最新的ToB事件
博客
Blog
排行榜
Ranklist
文库
业界最专业的IT文库,上传资料也可以赚钱
下载
分享
Share
导读
Guide
相册
Album
记录
Doing
搜索
本版
文章
帖子
ToB圈子
用户
免费入驻
产品入驻
解决方案入驻
公司入驻
案例入驻
登录
·
注册
只需一步,快速开始
账号登录
立即注册
找回密码
用户名
Email
自动登录
找回密码
密码
登录
立即注册
首页
找靠谱产品
找解决方案
找靠谱公司
找案例
找对的人
专家智库
悬赏任务
圈子
SAAS
IT评测·应用市场-qidao123.com技术社区
»
论坛
›
大数据
›
数据仓库与分析
›
Redis的List范例
Redis的List范例
万万哇
论坛元老
|
2025-3-29 13:35:28
|
显示全部楼层
|
阅读模式
楼主
主题
1681
|
帖子
1681
|
积分
5043
一.List范例
简单介绍
列表的List相称于数组大概次序表。
列表两端插入和弹出操作:
列表的获取、删除操作:
二.List的常用命令
1.LPUSH
按照次序进行依次进行头插元素
演示:
2.LRANGE
查看LIst中指定范围的元素
演示:
此处的序号和下标无关,这个序号是专门给结果集使用的序号。在hash操作也大概会得到这种带有序号的结果,这种序号仅仅是标识返回元素的次序也和下标无关,hash范例无下标的概念。
注意:
在Redis当中,没有采取当下标越界时,就返回一个非常的计谋,而是尽大概的获取给定区间的元素,如果给定区间非法,好比超出下标就会尽大概获取对应的内容:
当如果两个下标都越界了,此时就获取不到元素:
3.LPUSHX
LPUSHX和LPUSH不同的是,LPUSHX只能在key存在的链表上进行头插,而不能在不存在的Key上进行头插
演示:
4.RPUSH
和LPUSH用法相同,只不外是尾插
演示:
5.RPUSHX
和LPUSHX结果雷同,只能在已存在的key上进行操作。
演示:
6.LPOP
头删
演示:
7.RPOP
尾删
演示:
必要注意的是此处的redis版本比较低,所以在RPOP命令中的count没办法使用,这个是后续版本出来的新功能,这里的redis版本较低不支持。
8.LINDEX
获取从左边第index位置的元素
演示:
9.LINSERT
在特定位置插入元素
演示:
注意:
LINSERT是找到一个基准值后,在它之前大概之后进行插入,如果此时有列表中有两个值都符合LINSERT中的基准值,此时会在列表中开始从左往右进行查找,开始查找到的就作为基准值。
10.LLEN
查询列表key的长度
演示:
11.LREM
LREM => List Remove 删除,count表现要删除的个数,element表现要删除的值
count > 0,列表从左往右删除count个符合element的元素
count < 0,列表从右往左删除 |count|个 符合element的元素
count = 0,删除列表中全部符合element的元素
演示:
count > 0:
count < 0:
count = 0:
12.LTRIM
删除指定下标范围外的所有元素
演示:
13.LSET
根据下标修改元素
演示:
注意:
lindex可以很好的处理下标越界的情况,直接返回nil,对于lset来说会直接报错。
三.阻塞命令
BRPOP和BLPOP阻塞版本的命令,对应的就是LPOP和RPOP这两个不是阻塞版本的命令。
如果list中存在元素,BLPOP和BRPOP 就和 LPOP and RPOP的功能相同。
如果list中不存在元素,BLPOP和BRPOP 就会产生阻塞,一直阻塞到list插入元素为止。
但是阻塞版本的命令会根据timeout阻塞一段时间,因为BLPOP和BRPOP可以设置阻塞时间,而且,期间redis可以实行其他命令。
此处的BLPOP和BRPOP看起来好像会因为阻塞的问题斲丧很多时间,但是现实上并不会对redis服务器产生负面影响。
在使用BLPOP和BRPOP的命令中如果设置了多个key,那么会从左往右进行遍历key,一旦有一个key对应的列表中可以弹出元素,命令立即返回。
Redis新版的等待时间支持小数,旧版本不支持小数。
1.BRPOP
阻塞命令的尾删
演示:
(i)针对不是空的列表进行操作:
(ii)针对空列表进行操作:
(iii)针对空列表使用阻塞命令:
针对空列表使用阻塞命令时,使用另一个reids客户端进行插入数据则可以将实行BRPOP的客户端的阻塞给结束。
此时还没有在另一个reids客户端进行插入数据操作,此时第一个redis客户端使用了BRPOP则处于阻塞状态。
当第二个redis客户端将数据插入时,第一个redis客户端此时的阻塞就结束了。
(iv)针对多个key进行操作
2.BLPOP
阻塞命令的头删
演示:
和BRPOP用法相同就不再重复。
四.List的内部编码
现在List的内部编码不再是之前的老版本的ziplist和Linkedlist了,现在最新的版本是使用的quicklist,quicklist是基于ziplist和Linkedlist的结合体。
五.List的应用场景
1.List作为数组来存储多个元素
在MySQL中表现学生和班级信息是通过两张表进行的:
如果此时必要查询制定班级中有哪些同砚,那么在redis中就可以通过图中的方式进行筹划:
存储班级和学生的信息的那张表格中,是通过hash范例进行存储的,下面的表格则是通过列表来进行生存classId = 1时,有哪些学生是这个班级的。
此时这个情势是列表,列表雷同于数组来存储学生的id,如果不使用第一个表格的hash范例来存储学生和班级的信息的话,也可以使用JSON的方式放在列表当中,就可以不必要在通过hash范例的表格来进行存储。
2.作为消息队列
只有一个斲丧者能够抢到元素,抢到元素是通过谁先实行brpop的次序来排序的,所以谁先实行brpop命令,谁开始抢到元素。
假设现在斲丧者的次序是1,2,3 生产者进行 lpush 时,斲丧者1就会开始抢到元素,此时斲丧者1拿到元素之后,如果还想继续抢元素,就必须重新实行brpop的命令。
当斲丧者1重新实行brpop后,此时的斲丧者次序就变成了2,3,1了,此时生产者再来一个元素,斲丧者2就能够抢到元素,此时如果你斲丧者2又想抢到元素,也必要重新实行brpop命令。
此时的斲丧者的次序就是3,2,1了,之后就是以此类推。
3.多频道消息队列
多个频道/列表的使用在日常中是非经常见的,好比说现在大家每天都在刷的短视频,就是基于这种消息队列进行实现的一些功能。
好比说,使用一个通道来进行传输短视频的数据,还可以使用一个通道来传输弹幕,还可以使用一个频道来传输点赞,转发,收藏的数据……
4.微博Timeline
1)每篇微博使用hash来进行存储,比方微博的3个属性:title、timestamp、content:
2)向用户Timeline添加微博,user::mblogs作为微博的键:
3)分页获取用户的Timeline,比方获取用户1的前10篇微博:
情况1:
在第三步进行分页获取用户的微博时,多次使用hgetall操作,大概会导致循环次数比较多,因为不确定一页中的数据是多少,所以就会触发很多次hgetall,就会有很多的网络请求。
此时可以通过pipeline流水线(管道)的方式来进行解决这种很多的网络请求,因为此时有很多个redis命令,所以可以通过pipeline来把这些redis命令合并成一个网络请求进行通信,大大降低了客户端和服务器之间的交互次数。
情况2:
分裂文章时,使用lrange在列表的两端表现会比较好,但是如果获取列表的中心元素就会表现比较差,此时可以考虑将列表进行划分。
假设某个用户发了1w个微博,此时list的长度就是1w,就可以把这个1w个微博进行拆成10份,每个就是1k个微博。
5.栈和队列的命令组合
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
本帖子中包含更多资源
您需要
登录
才可以下载或查看,没有账号?
立即注册
x
回复
使用道具
举报
0 个回复
倒序浏览
返回列表
快速回复
高级模式
B
Color
Image
Link
Quote
Code
Smilies
您需要登录后才可以回帖
登录
or
立即注册
本版积分规则
发表回复
回帖并转播
回帖后跳转到最后一页
发新帖
回复
万万哇
论坛元老
这个人很懒什么都没写!
楼主热帖
markdown day 01
Linux系统调用四、lseek()函数详解 ...
Nacos注册中心-----从0开始搭建和使用 ...
ClickHouse(05)ClickHouse数据类型详解 ...
基于CSDN云和docker全家桶的微服务项目 ...
【云原生】Docker 进阶 -- 数据卷使用 ...
100天精通Python(进阶篇)——第39天 ...
应急救灾物资行业标准与规范 ...
阿里云域名购买流程以及免费证书的申请 ...
redis for windows 7.0.2安装包全网首 ...
标签云
AI
运维
CIO
存储
服务器
浏览过的版块
IOS
程序人生
Mysql
人工智能
Oracle
MES
云原生
Postrge-SQL技术社区
开源技术
快速回复
返回顶部
返回列表