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
,实现简单高效的消息队列。