*Redis RENAMENX 命令

RENAMENX 仅在目标键名不存在时,将指定 key 重命名为 newkey。


*语法

RENAMENX key newkey

*参数说明

参数 类型 必填 说明
key String 原键名
newkey String 新键名

*返回值

  • 1:重命名成功(newkey 不存在)
  • 0:newkey 已存在,未执行重命名
  • Error:key 不存在时返回错误

*时间复杂度

O(1)

*

*示例

*基本用法

> SET mykey "hello"
OK
> RENAMENX mykey newkey
(integer) 1
> GET newkey
"hello"

*newkey 已存在

> SET key1 "value1"
OK
> SET key2 "value2"
OK
> RENAMENX key1 key2
(integer) 0
> GET key1
"value1"
> GET key2
"value2"

*键不存在

> RENAMENX nonexist newkey
(error) ERR no such key

*常见错误

错误 原因 解决
ERR no such key key 不存在 先用 EXISTS 确认 key 存在
ERR wrong number of arguments 缺少 key 或 newkey 检查参数数量

*最佳实践

  • 安全重命名:避免意外覆盖已有 key,使用 RENAMENX 确保原子性检查
  • 数据迁移或数据结构升级时,先用 RENAMENX 尝试重命名
  • 配合 EXISTS 做前置检查(注意非原子)
  • 批量重命名时建议使用 Lua 脚本保证原子性

*FAQ

Q1: RENAMENX 和 RENAME 有什么区别? A: RENAME 无条件重命名,若 newkey 存在则覆盖;RENAMENX 仅在 newkey 不存在时才重命名,防止数据丢失。

Q2: RENAMENX 是原子操作吗? A: 是。检查和重命名在一个原子操作中完成,不存在竞态条件。

Q3: 重命名时 key 的过期时间会保留吗? A: 会。重命名后,TTL 等元数据完整保留。