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
移动的元素数量:
OBO | BULK
元素压入destination的顺序:
OBO(一个接一个)单独移动元素:每个元素从source中弹出,并在移动下一个元素之前推送到destination。BULK一次移动所有元素,保留它们的相对顺序。
详细说明
阻塞行为
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 文档许可。