Redis 列表(List)是一种常用的数据结构,它允许在元素的两侧进行插入和删除操作,常用于实现消息队列、任务队列、最新列表等场景,以下是 Redis 列表相关的核心命令,按功能分类详细说明:

基本操作命令
-
LPUSH:将一个或多个值插入到列表的头部(左侧)。
- 语法:
LPUSH key value [value ...] - 示例:
LPUSH mylist "a" "b"表示将 "a" 和 "b" 依次插入到mylist的头部,列表结果为["b", "a"](假设列表为空)。
- 语法:
-
RPUSH:将一个或多个值插入到列表的尾部(右侧)。
- 语法:
RPUSH key value [value ...] - 示例:
RPUSH mylist "c" "d"表示将 "c" 和 "d" 插入到mylist的尾部,列表结果为["b", "a", "c", "d"]。
- 语法:
-
LPOP:移除并返回列表头部的元素。
- 语法:
LPOP key - 示例:
LPOP mylist返回 "b",列表变为["a", "c", "d"]。
- 语法:
-
RPOP:移除并返回列表尾部的元素。
(图片来源网络,侵删)- 语法:
RPOP key - 示例:
RPOP mylist返回 "d",列表变为["a", "c"]。
- 语法:
查询与范围操作
-
LRANGE:获取列表中指定范围内的元素,索引从 0 开始,-1 表示最后一个元素。
- 语法:
LRANGE key start stop - 示例:
LRANGE mylist 0 -1返回列表所有元素["a", "c"];LRANGE mylist 0 0返回["a"]。
- 语法:
-
LINDEX:通过索引获取列表中的元素。
- 语法:
LINDEX key index - 示例:
LINDEX mylist 1返回 "c"。
- 语法:
-
LLEN:返回列表的长度。
- 语法:
LLEN key - 示例:
LLEN mylist返回 2。
- 语法:
插入与删除元素
-
LINSERT:在列表的指定元素前或后插入新元素。
(图片来源网络,侵删)- 语法:
LINSERT key BEFORE|AFTER pivot value - 示例:
LINSERT mylist BEFORE "c" "b"在 "c" 前插入 "b",列表变为["a", "b", "c"]。
- 语法:
-
LREM:移除列表中指定的值,可指定移除数量。
- 语法:
LREM key count value - 示例:
LREM mylist 1 "b"移除从左数第一个 "b",列表变为["a", "c"];若count为负数,则从右移除。
- 语法:
修改与修剪
-
LSET:通过索引设置列表中元素的值。
- 语法:
LSET key index value - 示例:
LSET mylist 0 "x"将第一个元素改为 "x",列表变为["x", "c"]。
- 语法:
-
LTRIM:修剪列表,只保留指定范围内的元素。
- 语法:
LTRIM key start stop - 示例:
LTRIM mylist 0 0只保留第一个元素,列表变为["x"]。
- 语法:
阻塞操作
- BLPOP/BRPOP:阻塞式弹出列表头部/尾部元素,等待超时或可弹出元素。
- 语法:
BLPOP key [key ...] timeout - 示例:
BLPOP mylist 10阻塞 10 秒,若mylist非空则弹出元素,否则超时返回。
- 语法:
以下是常用列表命令的总结表格:
| 命令 | 语法 | 功能描述 |
|---|---|---|
| LPUSH | LPUSH key value [value...] | 将值插入列表头部 |
| RPUSH | RPUSH key value [value...] | 将值插入列表尾部 |
| LPOP | LPOP key | 移除并返回列表头部元素 |
| RPOP | RPOP key | 移除并返回列表尾部元素 |
| LRANGE | LRANGE key start stop | 获取列表指定范围元素 |
| LINDEX | LINDEX key index | 通过索引获取元素 |
| LLEN | LLEN key | 返回列表长度 |
| LINSERT | LINSERT key BEFORE/AFTER pivot value | 在指定元素前后插入值 |
| LREM | LREM key count value | 移除列表中指定值的元素 |
| LSET | LSET key index value | 通过索引设置元素值 |
| LTRIM | LTRIM key start stop | 修剪列表,保留指定范围 |
| BLPOP | BLPOP key timeout | 阻塞式弹出列表头部元素 |
相关问答FAQs
Q1: Redis 列表的最大长度限制是多少?
A1: Redis 列表的长度限制为 2^32 - 1(约 43 亿个元素),实际使用中受限于服务器内存大小。
Q2: 如何高效地实现一个消息队列?
A2: 使用 LPUSH 生产消息(入队),RPOP 消费消息(出队);若需要阻塞等待,可用 BRPOP,实现简单高效的消息队列。
