news 2026/5/22 3:32:36

Redis——list相关指令

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Redis——list相关指令

下面是list数据结构的示意图,以及起相关指令所起作用的位置示意:

说明:

lpush相当于头插,lindex相当于根据下标获取列表中的一个元素。

头部添加元素(左进)

LPUSH key v1 v2 ... //向列表头部插入一个或多个元素,key不存在会自动创建空列表再插入。返回值:插入后列表的总长度 LPUSHX key v1 v2 ...//向列表头部插入一个或多个元素,key不存在会插入失败。返回值:插入后列表的总长度

尾部添加元素(右进)

RPUSH key v1 v2 ... //向列表尾部插入一个或多个元素,key不存在会自动创建空列表再插入。返回值:插入后列表的总长度 RPUSHX key v1 v2 ... //向列表尾部插入一个或多个元素,key不存在会插入失败。返回值:插入后列表的总长度

头部弹出元素(左出)

LPOP key //移除并返回列表头部第一个元素 //key不存在或列表为空,返回 nil

尾部弹出元素(右出)

RPOP key//移除并返回列表尾部最后一个元素 //key不存在或列表为空,返回 nil

获取指定范围元素

LRANGE key start end //获取列表中[start, end]区间的所有元素 //下标规则:0=第一个元素,-1=最后一个元素,-2=倒数第二个 //start超过列表长度:返回空列表 //end超过列表长度:默认取到列表末尾 //key不存在:返回空列表

指定位置插入元素

LINSERT key BEFORE|AFTER pivot value //在列表中指定基准元素的前面或后面插入新元素 BEFORE:在基准元素 pivot 之前插入 AFTER:在基准元素 pivot 之后插入 key 不存在或者列表中不存在 pivot 元素,返回 0,插入成功返回插入后列表总长度 如果list中存在多个基准元素,以第一个基准元素为准

获取列表长度

LLEN key //返回列表中元素的总个数,key不存在或列表为空,返回 0

根据下标获取元素

LINDEX key index //获取列表中指定下标位置的元素 //index为负数表示倒数位置 //下标越界或key不存在,返回 nil

删除元素

LREM key count value //根据 count 值删除列表中指定的 value 元素.返回值:实际被删除的元素个数,key 不存在时,统一返回 0 count > 0:从列表头部向尾部遍历,删除前 count 个 value count < 0:从列表尾部向头部遍历,删除后 |count| 个 value count = 0:删除列表中所有等于 value 的元素

根据下标修改元素

LSET key index value //将列表中指定下标位置的元素修改为value。返回值:修改成功返回 OK //下标必须存在,否则报错

截取列表

LTRIM key start end //只保留列表中[start, end]区间的元素,删除其余元素,返回值:操作成功返回 OK //常用于固定列表长度(如消息队列保留最新100条)

阻塞式头部弹出

BLPOP key1 key2 ... timeout //LPOP 的阻塞版本,如果链表中没有数据可以弹出,就会阻塞本客户端,但是Redis服务不会阻塞哦。支持同时监听多个链表,规则是一但有一个链表有了数据就立刻弹出数据后返回,其他链表就不管了。 timeout 这是超时时间(单位:秒),超过了这个时间客户端就不再阻塞了。 返回值: 超时无数据返回 nil 成功返回被弹出元素的链表和被弹出的元素

需要注意的是:

被阻塞的客户端是有顺序的。比如说两个客户端等待同一个链表,等到链表有数据的时候,先等待的就会弹出数据并返回。

阻塞式尾部弹出

BRPOP key1 key2 ... timeout 与上同理

list的适用场景举例

负载均衡下要决定把任务交给哪个服务器,其中一种算法就是轮询,即:服务器轮流接任务。由于Redis中list中的brpop阻塞是有顺序(谁先阻塞谁先取)所以很自然的可以实现轮询。

brpop 命令可以一次性等待多个链表,通过让不同链表代表不同频道,实现消费者订阅不同频道的理念。

除此之外,链表是有序的,并且链表支持范围查询,因此链表可以很好的支持分页显示。链表的范围查询(lrange)的时间复杂度是O(N),这在链表过长的时候消耗较大,因此可以把一个链表的内容分成多个链表存储,比如每个链表存500个,分5个链表,当我们要显示第2100-2200的数据时,直接查找最后一个链表即可,省去了很多无效遍历,本质上是一种目录的思想。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/22 3:32:28

【限时解密】Midjourney后现代风格黄金参数矩阵(含27组实测CR值对比数据):错过本轮更新将永久失去V6.1前最后兼容窗口期

更多请点击&#xff1a; https://intelliparadigm.com 第一章&#xff1a;后现代视觉语法的解构与重铸 在当代前端工程实践中&#xff0c;“视觉语法”已不再仅指代CSS规则或设计系统规范&#xff0c;而演变为一种融合语义、交互意图与上下文感知的多维表达协议。后现代语境下…

作者头像 李华
网站建设 2026/5/22 3:31:06

【2026实测】论文AI率爆红怎么办?5款降AI工具横测与免费指令指南

辛辛苦苦熬夜敲出来的两万字内容&#xff0c;满心欢喜去测aigc率&#xff0c;结果满屏飘红。那种委屈又无语的崩溃感&#xff0c;经历过的人一定都懂。为了能帮到大家&#xff0c;我这大半个月都在测试各类降ai率工具。 今天就把那些真正能降低ai率的实用方法和靠谱的降ai率工…

作者头像 李华
网站建设 2026/5/22 3:31:05

应对2026检测算法:实测5大降AI神器,附免费微调指令

辛辛苦苦熬夜敲出来的两万字内容&#xff0c;满心欢喜去测aigc率&#xff0c;结果满屏飘红。那种委屈又无语的崩溃感&#xff0c;经历过的人一定都懂。为了能帮到大家&#xff0c;我这大半个月都在测试各类降ai率工具。 今天就把那些真正能降低ai率的实用方法和靠谱的降ai率工…

作者头像 李华
网站建设 2026/5/22 3:28:42

Arm DS调试中全局变量显示问题解析与解决方案

1. 为什么Arm DS的Variables视图中不显示某些全局变量&#xff1f;在Arm Development Studio&#xff08;Arm DS&#xff09;中进行调试时&#xff0c;许多开发者会遇到一个困惑&#xff1a;为什么Variables视图没有显示所有预期的全局变量&#xff1f;这个问题其实与调试器的工…

作者头像 李华
网站建设 2026/5/22 3:28:23

关于国内SDR(成都振芯)的介绍说明

概述 软件无线电&#xff08;SDR&#xff09;是一种无线电通信技术&#xff0c;其关键功能&#xff08;如调制解调、滤波、变频等&#xff09;通过软件在可编程硬件&#xff08;如FPGA、DSP&#xff09;上实现&#xff0c;而非依赖固定的硬件电路。这使得无线电设备具有高度的灵…

作者头像 李华
网站建设 2026/5/22 3:28:22

离子阱量子变分算法原理与优化实践

1. 离子原生量子变分算法解析在量子计算领域&#xff0c;变分量子算法&#xff08;VQA&#xff09;已成为解决组合优化问题的主流方法。这类算法的核心在于设计高效的参数化量子线路&#xff08;ansatz&#xff09;&#xff0c;而传统方法通常依赖于大量纠缠门的组合。离子阱量…

作者头像 李华