Redis List 常用命令梳理:插入、读取、修改与弹出

Evan
Evan
发布时间:2026-08-25| 48人浏览过
原创

前言

在 Redis 里,List 常被简单理解成“数组”,但真正容易混淆的地方其实是头尾插入后的顺序变化、范围读取的索引写法,以及按位置修改时的边界限制。本文按常见操作拆开讲解 LPUSH、RPUSH、LRANGE、LSET、LINDEX、LPOP、RPOP,并结合实际返回结果说明什么时候该用哪条命令。

在 Redis 里,List 是最容易上手的数据结构之一,但很多人刚接触时只记住了“像数组”,没真正弄清头插、尾插、范围读取和按索引修改各自适合什么场景。下面就按实际操作顺序梳理 List 的常用命令,并结合返回结果说明它的顺序规则、索引写法以及哪些情况下会直接报错,读完就能判断该用哪条命令处理列表数据。

Redis List 是什么,能存多少数据

List 就是一组按顺序排列的数据集合,可以理解成编程语言里的数组或线性列表。它会保留元素的插入顺序,而且既支持从头部插入,也支持从尾部插入。

在 Redis 中,一个列表最多可以包含 2 的 32 次方 - 1 个元素,也就是 4294967295 个。

LPUSH 和 RPUSH:从头部或尾部插入元素

LPUSH 用来把一个或多个元素插入到列表头部;如果列表对应的 key 不存在,Redis 会自动创建这个列表。

用头插和尾插展示 Redis 列表顺序变化的暖色专栏配图
头插与尾插后的列表顺序同一个 Redis List 在头插和尾插混合使用时,元素顺序会发生明显变化。

向列表中插入单个元素:

127.0.0.1:6379> LPUSH cities beijing
(integer) 1

向同一个列表头部继续插入多个元素:

127.0.0.1:6379> LPUSH cities shanghai shenzheng
(integer) 3

这里返回的整数表示当前列表长度。由于是从头部插入,后写入的元素会排在更前面。

RPUSH 则与之相反,它会把元素追加到列表尾部;如果 key 不存在,同样会自动创建。

127.0.0.1:6379> RPUSH cities guangzhou
(integer) 4

执行完上面的几条命令后,列表内部顺序已经不是最早理解的“插入即简单追加”,而是同时受头插和尾插影响。后面用 LRANGE 查看时,这个顺序会很直观地体现出来。

LRANGE、LINDEX:怎么按范围或按索引取值

LRANGE 用来读取列表中某个范围内的元素,使用时要带上开始索引和结束索引。

展示 Redis List 索引规则、范围读取与边界写法的暖色专栏配图
范围读取与索引定位读 Redis List 时,最容易混淆的是索引起点、负数索引和整表范围写法。

例如,获取前 3 个元素:

127.0.0.1:6379> LRANGE cities 0 2
1) "shenzheng"
2) "shanghai"
3) "beijing"

从这个结果可以看出,前面两次 LPUSH 的元素排在列表前部,而通过 RPUSH 加进去的 guangzhou 会留在尾部。

List 的索引从 0 开始:0 表示第一个元素,1 表示第二个元素。它也支持负数索引,其中 -1 表示最后一个元素,-2 表示倒数第二个元素。

因此,读取整个列表时,最常见的写法就是从 0 到 -1:

127.0.0.1:6379> LRANGE cities 0 -1
1) "shenzheng"
2) "shanghai"
3) "beijing"
4) "guangzhou"

如果只想取某一个位置上的值,就不必再用范围查询,而是直接使用 LINDEX。

127.0.0.1:6379> LINDEX cities 2
"wuhan"

LINDEX 适合在你已经明确目标位置时读取单个元素,语义也更直接。

LSET、LPOP、RPOP:修改指定位置,或从两端弹出元素

如果需要通过索引修改列表中的某个元素,可以使用 LSET。比如把第 3 个元素改成 wuhan:

127.0.0.1:6379> LSET cities 2 wuhan
OK

127.0.0.1:6379> LRANGE cities 0 -1
1) "shenzheng"
2) "shanghai"
3) "wuhan"
4) "guangzhou"

这里的 2 仍然是从 0 开始计算的索引,也就是第三个元素。

需要注意的是,LSET 并不是“想改哪里就改哪里”。如果指定索引超出列表范围,Redis 会返回错误;如果对一个空列表执行 LSET,同样会报错。

删除并返回元素时,List 主要看两端操作:

从头部移除并返回第一个元素,使用 LPOP:

127.0.0.1:6379> LPOP cities
"shenzheng"

从尾部移除并返回最后一个元素,使用 RPOP:

127.0.0.1:6379> RPOP cities
"guangzhou"
127.0.0.1:6379> LRANGE cities 0 -1
1) "shanghai"
2) "wuhan"

经过一次 LPOP 和一次 RPOP 之后,列表只剩下中间的两个元素。这类双端操作也是 Redis List 在消息队列、待处理任务列表等场景中很常见的原因。

除了这些高频命令,还能看哪些列表操作

上面几条已经覆盖了 List 最常见的增、查、改、弹出操作。除此之外,Redis 还提供了其他列表命令,例如 LLEN、LREM、LINSERT 等。

如果要进一步查完整命令说明,可以查看 Redis 官方文档:

相关标签:

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。