SMOVE:将元素从一个集合移动到另一个集合
SMOVE
命令允许用户将指定的元素从源集合移动到目标集合:
- SMOVE source target element
SMOVE
命令在移动操作成功执行时返回 1
;如果指定的元素并不存在于源集合,那么 SMOVE
命令将返回 0
,表示移动操作执行失败。
以下代码展示了如何通过 SMOVE
命令,将存在于 databases
集合的 "Redis"
元素以及 "MongoDB"
元素移动到 nosql
集合里面:
- redis> SMOVE databases nosql "Redis"
- (integer) 1 -- 移动成功
- redis> SMOVE databases nosql "MongoDB"
- (integer) 1 -- 移动成功
图 5-4 展示了这两个 SMOVE
命令的执行过程。
图 5-4 SMOVE
命令的执行过程:
执行 SMOVE
命令之前的 databases
集合和 nosql
集合执行 SMOVE databases nosql "Redis"
之后执行 SMOVE databases nosql "MongoDB"
之后
忽略不存在的元素
如果用户想要移动的元素并不存在于源集合,那么 SMOVE
将放弃执行移动操作,并返回 0
表示移动操作执行失败。
举个例子,对于图 5-5 所示的 fruits
集合和 favorite-fruits
集合来说,尝试把不存在于 fruits
集合的 "dragon fruit"
元素移动到 favorite-fruits
集合将会导致 SMOVE
命令执行失败:
- redis> SMOVE fruits favorite-fruits "dragon fruit"
- (integer) 0 -- 没有元素被移动
图 5-5 fruits
集合和 favorite-fruits
集合
覆盖已存在的元素
即使用户想要移动的元素已经存在于目标集合,SMOVE
命令仍然会将指定的元素从源集合移动到目标集合,并覆盖目标集合里面的相同元素。从结果来看,这种移动不会改变目标集合包含的元素,只会导致被移动的元素从源集合中消失。
以图 5-5 中展示的 fruits
集合和 favorite-fruits
集合为例,如果我们执行以下代码:
- redis> SMOVE fruits favorite-fruits "apple"
- (integer) 1
那么 fruits
集合中的 "apple"
元素将被移动到 favorite-fruits
集合里面,覆盖掉 favorite-fruits
集合原有的 "apple"
元素。从结果来看,"apple"
元素将从 fruits
集合中消失,而 favorite-fruits
集合包含的元素则不会发生变化。图 5-6 展示了上面的 SMOVE
命令执行之后,fruits
集合和 favorite-fruits
集合的样子。
图 5-6 执行 SMOVE
命令之后的 fruits
集合和 favorite-fruits
集合
其他信息
属性 | 值 |
---|---|
复杂度 | O(1) |
版本要求 | SMOVE 命令从 Redis 1.0.0 版本开始可用。 |