RENAME、RENAMENX:修改键名
Redis 提供了 RENAME
命令,用户可以使用这个命令对键的名字进行修改:
- RENAME origin new
RENAME
命令在执行成功时将返回 OK
作为结果。
作为例子,以下代码展示了如何将键 msg
改名为键 message
:
- redis> GET msg
- "hello world"
- redis> RENAME msg message
- OK
- redis> GET msg
- (nil) -- 原来的键在改名之后已经不复存在
- redis> GET message
- "hello world" -- 访问改名之后的新键
覆盖已存在的键
如果用户指定的新键名已经被占用,那么 RENAME
命令会先移除占用了新键名的那个键,然后再执行改名操作。
在以下这个例子中,键 k1
和键 k2
都存在,如果我们使用 RENAME
命令将键 k1
改名为键 k2
,那么原来的键 k2
将被移除:
- redis> SET k1 v1
- OK
- redis> SET k2 v2
- OK
- redis> RENAME k1 k2
- OK
- redis> GET k2
- "v1"
只在新键名尚未被占用的情况下进行改名
除了 RENAME
命令之外,Redis 还提供了 RENAMENX
命令。RENAMENX
命令和 RENAME
命令一样,都可以对键进行改名,但 RENAMENX
命令只会在新键名尚未被占用的情况下进行改名,如果用户指定的新键名已经被占用,那么 RENAMENX
将放弃执行改名操作:
- RENAMENX origin new
RENAMENX
命令在改名成功时返回 1
,失败时返回 0
。
比如在以下例子中,因为键 k2
已经存在,所以尝试将键 k1
改名为 k2
将以失败告终:
- redis> SET k1 v1
- OK
- redis> SET k2 v2
- OK
- redis> RENAMENX k1 k2
- (integer) 0 -- 改名失败
与此相反,因为键 k3
尚未存在,所以将键 k1
改名为键 k3
的操作可以成功执行:
- redis> GET k3
- (nil)
- redis> RENAMENX k1 k3
- (integer) 1 -- 改名成功
- redis> GET k3
- "v1"
- redis> GET k1
- (nil) -- 改名之后的 k1 已经不再存在
其他信息
属性 | 值 |
---|---|
复杂度 | O(1) |
版本要求 | RENAME 命令和 RENAMENX 命令都从 Redis 1.0.0 版本开始可用。 |