LMOVEM
批量移动列表元素,并返回移动的元素。
语法
LMOVEM source destination [ ]
引入版本:8.10.0
复杂度摘要:O(N)
[!NOTE] 此命令的行为在集群 Redis 环境中有所不同。请参阅 多键操作 页面了解更多信息。
以原子方式将一个或多个元素从存储在 source 的列表移动到存储在 destination 的列表,并返回移动的元素。 LMOVEM 是 LMOVE 的多元素版本:没有可选的 how-many 块,它的行为与 LMOVE 完全相同,但将移动的元素作为单元素数组返回。
必需参数
source
源列表的key。
destination
目的地列表键。
LEFT | RIGHT
source 的末尾要从以下位置弹出元素:LEFT(头)或 RIGHT(尾)。
LEFT | RIGHT
destination 的末尾将元素推送到:LEFT(头)或 RIGHT(尾)。
可选参数
how-many 块控制移动的元素数量以及移动顺序。包含它时,必须提供选择器(COUNT 或 EXACTLY)和排序(OBO 或 BULK)。
COUNT count | EXACTLY exactly
移动的元素数量:
OBO | BULK
元素压入destination的顺序:
OBO(一个接一个)单独移动元素:每个元素从source中弹出,并在移动下一个元素之前推送到destination。BULK一次移动所有元素,保留它们的相对顺序。
两种排序的不同之处仅在于元素的最终排列。有关详细信息,请参阅 元素排序。
示例
redis> rpush mylist 1 2 3 4
(integer) 4
redis> LMOVEM mylist myotherlist LEFT LEFT COUNT 2 OBO
1) "2"
2) "1"
redis> LRANGE mylist 0 -1
1) "3"
2) "4"
redis> LRANGE myotherlist 0 -1
1) "2"
2) "1"
redis> LMOVEM mylist myotherlist LEFT LEFT EXACTLY 5 BULK
(nil)
redis> RPUSH somelist a b c
(integer) 3
redis> LMOVEM somelist somelist LEFT LEFT EXACTLY 2 OBO
1) "b"
2) "a"
redis> LRANGE somelist 0 -1
1) "b"
2) "a"
3) "c"
详细说明
移动多个元素
LMOVEM 将元素从 source 的一端(由第一个 LEFT | RIGHT 参数选择)移动到 destination 的一端(由第二个 LEFT | RIGHT 参数选择),并将移动的元素作为数组返回。如果 source 不存在,则不执行任何操作,并且该命令返回空数组(使用 EXACTLY 时返回 nil)。
COUNT 和 EXACTLY 选择器决定移动多少个元素:
- 对于
COUNT count,命令向上移动到count元素。如果source包含的元素少于count,则所有可用元素都会被移动。 - 对于
EXACTLY exactly,仅当source至少保存了所请求数量的元素时,该命令才会移动所请求数量的元素。否则它什么也不移动并返回零。当元素形成必须一起移动或根本不移动的固定大小组(例如,对或三元组)时,这非常有用。
元素排序
OBO 和 BULK 顺序决定了移动的元素在 destination 上的排列方式:
OBO(一个接一个)依次弹出和压入每个元素,因此较早弹出的元素最终位于目标端较晚弹出的元素的“下方”。BULK一次性移动整个批次,保留元素的相对顺序。
当 source 和 destination 是相同键时,这种差异成为有用的副作用。 BULK 保持列表不变(元素被删除并以相同的顺序重新添加),因此它实际上是一个无操作。然而,OBO 将移动的元素反转到位。例如,当 mylist 持有 a, b, c 时,运行 LMOVEM mylist mylist LEFT LEFT EXACTLY 2 OBO 会弹出 a,然后弹出 b,并将每个推回到头部,将 mylist 保留为 b, a, c。
Redis Software 与 Redis Cloud 兼容性
| Redis 软件 |
Redis Cloud |
说明 |
|---|---|---|
| ❌ 标准 |
❌ 标准 |
返回值
RESP2
以下之一: * 数组回复:移动的元素,按目标顺序。 * 无回复:如果使用了 EXACTLY 并且 source 没有容纳足够的元素。
RESP3
以下之一: * 数组回复:移动的元素,按目标顺序。 * 空回复:如果使用了 EXACTLY 并且 source 没有容纳足够的元素。
参见
LMOVE | BLMOVEM | LMPOP | RPOPLPUSH
相关主题
资料来源:Redis 官方 LMOVEM 文档;中文内容参考 Redis 文档许可。