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已经不再存在