Skip to content

List

List 列表结构可以 有序重复 的存储 多个字符串。类比 Java 中的 Map<key, List<String>> 结构。

命令作用
LPUSH将给定的值推入列表的 左端
RPUSH将给定的值推入列表的 右端
LRANGE获取列表指定范围的所有值
LINDEX获取列表指定位置上的单个元素
LPOP从列表的 左端 移除一个值,并返回该值
RPOP从列表的 右端 移除一个值,并返回该值
LTRIM对列表进行 修剪,只保留指定范围的元素
LLEN返回列表的长度
shell
# 左端推入一个值,并返回该 key 对应的列表数量
LPUSH list hello
(integer) 1

RPUSH list world
(integer) 2

LINDEX list 0
"hello"

LPUSH list say

# 查询列表的全部值
LRANGE list 0 -1
1) "say"
2) "hello"
3) "world"

# 移除列表左端值并返回
LPOP list
"say"

# 移除列表右端值并返回
RPOP list
"world"

阻塞式列表操作

命令作用
BLPOP [key-name...] timeout1. 从第一个非空列表弹出最 左端 的元素
2. 或在 timeout 秒之内阻塞并等待可弹出元素出现
BRPOP [key-name...] timeout1. 从第一个非空列表弹出最 右端 的元素
2. 或在 timeout 秒之内阻塞并等待可弹出元素出现
RPOPLPUSH <source-key> <dest-key>从 source 中弹出最右边元素,并推入 dest 最左端并返回该元素
BRPOPLPUSH <source-key> <dest-key> timeout相比 RPOPLPUSH,如果 source 没有元素,那么会阻塞等待 timeout

以上四个 command 常用于 Redis 队列

shell
# 弹出 list 最左端的元素 (only one),直到 5s 后超时
BLPOP list 5
1) "list"
2) "hello"

# 弹出 source 最右侧元素,推入 dest 最左侧
RPOPLPUSH source dest
(nil)

# 弹出 source 最右侧元素,推入 dest 最左侧,阻塞直到 timeout
BRPOPLPUSH source dest 5
(nil)