*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 等元数据完整保留。