# 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)。这些示例包括 LINDEXLINSERTLSET。运行这些命令时要小心,主要是在处理大型列表时。

# 备择方案

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

# 学到更多

  • Redis Lists Explained 是关于 Redis 列表的简短、全面的视频解释器。
  • Redis University 的 RU101 详细介绍了 Redis 列表。
Last Updated: 4/18/2023, 8:45:33 AM