当前位置: 首页 > news >正文

Redis中的List数据类型

这里的list相当于数组或者顺序表,但是并非是一个简单的数组,而是更像双端队列

List的指令:

1.LPUSH key element  [element ......]

这是头插,一次可以插入一个元素,也可以同时插入多个元素。

时间复杂度是O(1),返回值是list的长度。但是操作的key已经存在,而且value不是list,那么下面操作就会报错。

第二个命令,就是查看list指定范围的,LRANGE

2.LRANGE key start stop

这里的start和stop是闭区间。同时下标也支持负数。

-1代表倒数第一个,以此类推。

3.LPUSHX key element [element.....]

x代表EXISTS,存在的意思。如果key不存在,则不能成功头插成功,返回0。

返回结果还是key对应list的长度。

4.RPUSH key element [element .....]

在尾部插入元素。

5.RPUSHX key element [element ....]

上面解释过了x的意思,x代表EXISTS,存在的意思。如果key不存在,则不能成功尾插成功,返回0。

6.LPOP key 头删 RPOP key尾删

返回的是删除的元素。

不存在就返回nil

注意:
如果搭配rpush和lpop,就可以把list当成队列使用。

如果搭配rpush和rpop,就相当于把list当成栈使用。

7.lindex key index

获取index下标的元素

如果不存在该下标,则返回nil

8.LINSERT key BEFORE/AFTER index element

   这里的index并不是下标,而是list其中的元素。

    element是指要插入的元素。

before/after代表要插在index之前还是之后。

返回值是list的长度。

如果使用了不存在的元素就会返回nil

9.LLEN key

查看list中的元素的个数,如果不存在该key,则返回0

10.LREM key count element

rem代表remove删除的意思。element代表删除的元素。

这里的count有不同的情况。

当count>0,则代表从左往右删除对应个数的element

当count<0,则代表从右往左删除对应个数的element

当count=0,则代表删除所有的的element

                      

11.LTRIM key start stop

保留start和stop区间内的元素,其他的元素全部删除。

即使越界了也可以删除成功。

12.LSET key index element

index是下标,这个指令是根据下标修改元素。

如果使用了不存在的下标,就会直接报错

List阻塞版指令:

BLPOP key [key ...] timeout   从左侧弹出第一个元素

BRPOP key [key ...] timeout   从右侧弹出最后一个元素

B代表是block(阻塞),使用blpop和brpop可以显式的设置阻塞时间(不一定是无休止的阻塞)

阻塞时只支持“队列为空”的情况,不考虑‘“队列满的情况”,因为满这个不好定义。

针对空列表进行处理

如果处理非空的列表

针对多个key进行操作

此时blpop阻塞中

List内部编码格式:

ziplist压缩列表 把数据按照更加紧凑的压缩形式进行表示,节省空间

linkedlist链表

上面的编码格式是之前的Redis使用的,现在的Redis使用的是quicklist,相当于链表和压缩列表的结合。

整体还是一个链表,但是每个节点是一个压缩列表。

这是关于Redis里面的具体配置数据。

也可以通过object encoding key进行查看具体的内部编码格式。

List的应用场景:

1.把List作为数组这样的结构,用来储存多个元素。

可以用来表示学生和班级的关系,Redis提供的查询能力不像MySQL这么强大。

2.使用Redis作为消息队列(生产者消费者模型)

 

谁先执行的这个brpop命令,谁就能先拿到新来的元素。

这样就构成了一个“轮询”的效果。

比如消费者执行顺序是 1 2 3 ,此时当新元素到达后,就会按照执行brpop的命令的先后来决定谁获取到的。

消费者1先拿到元素后,就从brpop中返回了,这个命令就执行完了,如果消费者1还想继续消费,就要重新执行brpop,然后就要“排队”到消费者3后面。

如果还有消费者4要消费,就更要“排队”了。这就是轮询的效果

3.微博TimeLine

1.有序性与插入效率:微博TimeLine需要按发布时间进行排序,List从lpush或者Rpush命令,能在O(1)的时间插入到头部或者尾部,保证时间不混乱。

2.高效的范围查询:用户查看TimeLine时,通常是加载最新的N条记录,或者翻看历史动态。List的LRANGE key start stop指令可以在O(k)的时间内查询到k条记录。无需全量遍历,反应速率快

3.天然的去重和顺序维护:每条微博的插入都按照时间顺序进行插入,无需额外维护排序逻辑。且插入时已经按照时间排序了,不需要后续再进行排序。简化了TimeLine实现逻辑。


文章转载自:

http://lQzO5Lb2.yrctp.cn
http://4dUBWP35.yrctp.cn
http://NWrmjE0U.yrctp.cn
http://LKDvwOuV.yrctp.cn
http://O6eDPuVz.yrctp.cn
http://ldUsFX98.yrctp.cn
http://u9f8DZ9b.yrctp.cn
http://2bQAkSS1.yrctp.cn
http://IC13nCiL.yrctp.cn
http://3Dxitzbb.yrctp.cn
http://ZfnISji0.yrctp.cn
http://r9Aa3Q4T.yrctp.cn
http://6vctipJU.yrctp.cn
http://CP07GhOJ.yrctp.cn
http://1Iun83MB.yrctp.cn
http://W57vKPRZ.yrctp.cn
http://IwxKAZRI.yrctp.cn
http://UqfalCsl.yrctp.cn
http://s9xxcz07.yrctp.cn
http://ux2bwgTG.yrctp.cn
http://5jrnfu3f.yrctp.cn
http://i257FbwM.yrctp.cn
http://amZiKJs9.yrctp.cn
http://sTGaqa9e.yrctp.cn
http://4uXr74zY.yrctp.cn
http://3DhNFMV9.yrctp.cn
http://Z6T9JFsx.yrctp.cn
http://Dz56Fujr.yrctp.cn
http://6wS3Pc9y.yrctp.cn
http://RhlW7CMo.yrctp.cn
http://www.dtcms.com/a/370507.html

相关文章:

  • 设计一个 AB 测试平台
  • MATLAB2025-安装Embedded Code Support Pacjage for STM32 Processors
  • 去中心化投票系统开发教程 第三章:智能合约设计与开发
  • 基于Matlab的MEMS陀螺仪Allan方差分析与随机误差参数识别
  • 植物大战僵尸融合版安装包,下载安装教程
  • 基于STM32的智能宠物屋系统设计
  • SQL 入门指南:排序与分页查询(ORDER BY 多字段排序、LIMIT 分页实战)
  • (算法 哈希表)【LeetCode 349】两个数组的交集 思路笔记自留
  • 【PCIe EP 设备入门学习专栏 -- 8.1.3 PCIe EP AXI Bridge Module】
  • MySQL集群高可用架构(MHA高可用架构)
  • 多线程任务执行窗体框架jjychengTaskWinForm
  • GPIO介绍
  • 浅析Linux内核scatter-gather list实现
  • MotionSound-简单易用的文本转语音工具
  • 【左程云算法03】对数器算法和数据结构大致分类
  • 2.2 Web和Http
  • CuTe C++ 简介02,gemm_device cuda kernel 的实现
  • uniapp开发APP隐私检测不通过解决
  • Monorepo 是什么?如何使用并写自己的第三方库
  • 【56页PPT】华为集成服务交付ISD业务变革总体方案(附下载方式)
  • 九月六号练习题
  • 深度学习——PyTorch保存模型与调用模型
  • Go基础(⑤Consul)
  • 验证平台中所有的组件应该派生自UVM中的类
  • 企业微信智能表格高效使用指南
  • 自动化运维之ansible
  • 2025年上海市星光计划第十一届职业院校技能大赛高职组“信息安全管理与评估”赛项交换部分前6题详解(仅供参考)
  • Orin-Apollo园区版本:订阅多个摄像头画面拼接与硬编码RTMP推流
  • 多线程(六) ~ 定时器与锁
  • OpenSSL 1.0.1e 下载解压和运行方法(小白适用 附安装包)​