Redis 列表

评论 0 浏览 0 2023-06-15

Redis 列表简介

Redis 列表是字符串值的链接列表。 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 个元素的上限列表,您可以在每次调用 LPUSH 后调用 LTRIM
> 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)。 其中的示例包括 LINDEXLINSERTLSET。 运行这些命令时请务必小心,尤其是在大型列表上操作时。

备择方案

当您需要存储和处理一系列不确定的事件时,请考虑使用 Redis 流 作为列表的替代方案。

了解更多

最后更新2023-09-03
0 个评论
上一篇: Redis 字符串
下一篇: Redis集(Set)