首页/数据/数据库速查/RENAME / RENAMENX / COPY 键改名与复制
Redis 命令96 条

RENAME / RENAMENX / COPY 键改名与复制

RENAME 直接改名(目标已存在会被覆盖);RENAMENX 目标存在则拒绝;COPY(6.2+)复制键值,支持跨库(REPLACE 可覆盖)。

数据库速查数据更新于 2026-10-13

改名与复制键

RENAME 把键改名,目标键已存在时会被静默覆盖;RENAMENX 只在目标不存在时才改名;COPY(6.2+)复制键值到新键,支持 REPLACE 覆盖与指定目标库。三者都不改变数据类型,但 RENAME 与 COPY 在集群模式下的限制更明显:Cluster 只有 0 号库,跨库复制不可用,且键改名必须落在同一槽。

基本信息

适用RENAME 与 RENAMENX 早期版本即可用,COPY 需 6.2+
RENAME 行为改名,目标存在则覆盖
RENAMENX 行为目标存在返回 0 且不改名
COPY 选项DB 指定目标库、REPLACE 覆盖已存在的目标
集群限制只有 DB 0,跨槽改名需应用层搬运

示例与验证

示例与验证
SET old v
RENAME old new                   # OK,old 消失,new 为 v
RENAMENX new newer               # 1:目标不存在,改名成功
COPY new backup                  # 1:复制出新键
COPY new backup                  # 0:目标已存在,未覆盖
COPY new backup REPLACE          # 1:显式覆盖目标
COPY new backup2 DB 1            # 复制到 1 号库(集群模式下不适用)
TYPE backup                      # string:确认类型未变化
MEMORY USAGE backup               # 大 key 复制前先看单键内存占用

命令行为对照

命令目标存在时注意事项
RENAME静默覆盖误覆盖的生产事故多来自这里
RENAMENX返回 0,不改名适合「目标空缺才改名」的场景
COPY返回 0,不复制需要覆盖时显式加 REPLACE
COPY ... DB n可指定目标库Cluster 只有 DB 0,跨库不可用
集群环境改名要求同一槽跨槽会报错,需用 MIGRATE 或应用搬运

典型使用场景

  • 版本发布前切换键名,让新逻辑读取新键位
  • 灰度期间用 COPY 保留旧键,便于快速回退
  • 临时快照:复制一份键用于分析与比对
  • 脚本迁移字段前缀,用 RENAMENX 避免覆盖已有数据
  • 故障排查时复制现场数据,避免在原键上操作
RENAME 对键做的是引用改名,本身很快;但目标键被覆盖时旧值的对象释放与 COPY 大键都会带来明显的内存与耗时压力,大 key 操作建议放在低谷窗口。
在集群模式里对键做跨槽改名会直接报错,跨库复制也不可用;迁移类需求应使用 CLUSTER 的槽操作或由应用层搬运。

批量改名怎么做

  • 大批量改名先用 SCAN 游标遍历键空间,再逐个处理,避免一次性阻塞
  • 改名后旧键的引用要同步更新,否则应用会持续读到键不存在

易错点

  • RENAME 静默覆盖了不该覆盖的键:目标存在时不会报错,操作前先用 EXISTS 确认
  • 把 RENAMENX 当成 RENAME 用:目标存在时直接返回 0 不改名,业务逻辑需要处理这个分支
  • 集群模式使用 COPY ... DB 1:只有 0 号库可用,命令无法按预期工作
  • 对大 key 频繁 COPY:复制会额外占用一份内存,容易触发 maxmemory 淘汰

数据来源与参考

  • Redis 官方文档: RENAME
  • Redis 官方文档: COPY

相关工具

​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌