BLMOVEM

阻塞地批量移动列表元素,并返回移动的元素。

语法

BLMOVEM source destination timeout [ ]

引入版本:8.10.0

复杂度摘要:O(N)

[!NOTE] 此命令的行为在集群 Redis 环境中有所不同。请参阅 多键操作 页面了解更多信息。

BLMOVEM 是 LMOVEM 的阻塞变体。当 source 拥有足够的元素来满足请求时,此命令的行为与 LMOVEM 完全相同。否则,Redis 将阻止连接,直到另一个客户端将所需元素推送到 source 或到达 timeout。

必需参数

source

源列表的key。

destination

目的地列表键。

LEFT | RIGHT

source 的末尾要从以下位置弹出元素:LEFT(头)或 RIGHT(尾)。

LEFT | RIGHT

destination 的末尾将元素推送到:LEFT(头)或 RIGHT(尾)。

timeout

最大阻塞时间,单位为秒。 0 超时会无限期地阻塞。

可选参数

how-many 块控制移动的元素数量以及移动顺序。包含它时,必须提供选择器(COUNT 或 EXACTLY)和排序(OBO 或 BULK)。

COUNT count | EXACTLY exactly

移动的元素数量:

  • COUNT count 向上移动到 count 元素。如果 source 包含的元素少于 count 元素,则所有这些元素都会被移动。这与 LPOP 和 LMPOP 的 count 语义相匹配。
  • EXACTLY exactly 恰好移动 exactly 元素。如果 source 包含的元素少于 exactly 元素,则命令会阻塞(请参阅 阻塞行为)。
OBO | BULK

元素压入destination的顺序:

  • OBO(一个接一个)单独移动元素:每个元素从 source 中弹出,并在移动下一个元素之前推送到 destination。
  • BULK 一次移动所有元素,保留它们的相对顺序。

有关详细信息,请参阅 LMOVEM 文档的 元素排序 部分。

详细说明

阻塞行为

BLMOVEM 是否阻塞取决于选择器:

  • 对于 COUNT,命令仅在 source 为空时阻塞。一旦至少有一个元素可用,它就会解除阻塞,向上移动到 count 元素,然后返回它们。
  • 对于 EXACTLY,命令会阻塞,而 source 保存的元素数量少于请求的元素数量。仅当 source 增长到至少该长度时,它才会解锁,然后以原子方式精确移动那么多元素。

0 的 timeout 无限期阻塞。当在 MULTI/EXEC 块或 Lua 脚本内部使用时,BLMOVEM 不会阻塞;它的行为类似于 LMOVEM,当请求无法满足时,立即返回 nil。

Redis Software 与 Redis Cloud 兼容性

Redis
软件
Redis
Cloud
说明
❌ 标准
❌主动-主动
❌ 标准
❌主动-主动

返回值

RESP2

以下之一: * 数组回复:移动的元素,按目标顺序。 * 无回复:操作超时。

RESP3

以下之一: * 数组回复:移动的元素,按目标顺序。 * 空回复:操作超时。

参见

BLMOVE | LMOVEM | BLMPOP | BRPOPLPUSH

资料来源:Redis 官方 BLMOVEM 文档;中文内容参考 Redis 文档许可。