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版本开始可用。