RENAME、RENAMENX:修改键名

Redis 提供了 RENAME 命令,用户可以使用这个命令对键的名字进行修改:

  1. RENAME origin new

RENAME 命令在执行成功时将返回 OK 作为结果。

作为例子,以下代码展示了如何将键 msg 改名为键 message

  1. redis> GET msg
  2. "hello world"
  3.  
  4. redis> RENAME msg message
  5. OK
  6.  
  7. redis> GET msg
  8. (nil) -- 原来的键在改名之后已经不复存在
  9.  
  10. redis> GET message
  11. "hello world" -- 访问改名之后的新键

覆盖已存在的键

如果用户指定的新键名已经被占用,那么 RENAME 命令会先移除占用了新键名的那个键,然后再执行改名操作。

在以下这个例子中,键 k1 和键 k2 都存在,如果我们使用 RENAME 命令将键 k1 改名为键 k2 ,那么原来的键 k2 将被移除:

  1. redis> SET k1 v1
  2. OK
  3.  
  4. redis> SET k2 v2
  5. OK
  6.  
  7. redis> RENAME k1 k2
  8. OK
  9.  
  10. redis> GET k2
  11. "v1"

只在新键名尚未被占用的情况下进行改名

除了 RENAME 命令之外,Redis 还提供了 RENAMENX 命令。RENAMENX 命令和 RENAME 命令一样,都可以对键进行改名,但 RENAMENX 命令只会在新键名尚未被占用的情况下进行改名,如果用户指定的新键名已经被占用,那么 RENAMENX 将放弃执行改名操作:

  1. RENAMENX origin new

RENAMENX 命令在改名成功时返回 1 ,失败时返回 0

比如在以下例子中,因为键 k2 已经存在,所以尝试将键 k1 改名为 k2 将以失败告终:

  1. redis> SET k1 v1
  2. OK
  3.  
  4. redis> SET k2 v2
  5. OK
  6.  
  7. redis> RENAMENX k1 k2
  8. (integer) 0 -- 改名失败

与此相反,因为键 k3 尚未存在,所以将键 k1 改名为键 k3 的操作可以成功执行:

  1. redis> GET k3
  2. (nil)
  3.  
  4. redis> RENAMENX k1 k3
  5. (integer) 1 -- 改名成功
  6.  
  7. redis> GET k3
  8. "v1"
  9.  
  10. redis> GET k1
  11. (nil) -- 改名之后的 k1 已经不再存在

其他信息

属性
复杂度O(1)
版本要求RENAME 命令和 RENAMENX 命令都从 Redis 1.0.0 版本开始可用。