# Redis lists
Redis lists简介
Redis lists是字符串值的链表。Redis 列表经常用于:
- 实现堆栈和队列。
- 为后台工作系统构建队列管理。
# 例子
- 将列表视为队列(先进先出):
> LPUSH work:queue:ids 101
(integer) 1
> LPUSH work:queue:ids 237
(integer) 2
> RPOP work:queue:ids
"101"
> RPOP work:queue:ids
"237"
- 将列表视为堆栈(先进后出):
> LPUSH work:queue:ids 101
(integer) 1
> LPUSH work:queue:ids 237
(integer) 2
> LPOP work:queue:ids
"237"
> LPOP work:queue:ids
"101"
- 检查列表的长度:
> LLEN work:queue:ids
(integer) 0
- 从一个列表中原子地弹出一个元素并推送到另一个:
> LPUSH board:todo:ids 101
(integer) 1
> LPUSH board:todo:ids 273
(integer) 2
> LMOVE board:todo:ids board:in-progress:ids LEFT LEFT
"273"
> LRANGE board:todo:ids 0 -1
1) "101"
> LRANGE board:in-progress:ids 0 -1
1) "273"
- 要创建一个永远不会超过 100 个元素的上限列表,您可以
LTRIM
在每次调用后调用LPUSH
:
> LPUSH notifications:user:1 "You've got mail!"
(integer) 1
> LTRIM notifications:user:1 0 99
OK
> LPUSH notifications:user:1 "Your package will be delivered at 12:01 today."
(integer) 2
> LTRIM notifications:user:1 0 99
OK
# 限制
Redis 列表的最大长度为 2^32 - 1 (4,294,967,295) 个元素。
# 基本命令
LPUSH
将一个新元素添加到列表的头部;RPUSH
添加到尾巴。LPOP
从列表的头部移除并返回一个元素;RPOP
做同样的事情,但来自列表的尾部。LLEN
返回列表的长度。LMOVE
原子地将元素从一个列表移动到另一个列表。LTRIM
将列表减少到指定的元素范围。
# 阻塞命令
列表支持几个阻塞命令。例如:
BLPOP
从列表的头部删除并返回一个元素。如果列表为空,则命令会阻塞,直到元素可用或达到指定的超时。BLMOVE
原子地将元素从源列表移动到目标列表。如果源列表为空,则该命令将阻塞,直到有新元素可用。
请参阅 完整的列表命令系列
。
# 表现
访问其头部或尾部的列表操作是 O(1),这意味着它们非常高效。但是,操作列表中元素的命令通常是 O(n)。这些示例包括 LINDEX
、 LINSERT
和 LSET
。运行这些命令时要小心,主要是在处理大型列表时。
# 备择方案
当您需要存储和处理一系列不确定的事件时,可以考虑将 Redis 流作为列表的替代方案。
# 学到更多
Redis Lists Explained
是关于 Redis 列表的简短、全面的视频解释器。Redis University 的 RU101
详细介绍了 Redis 列表。