COPY 是什么
COPY 是 Redis 6.2 引入的命令,在同一个实例内把源键连同它的值和剩余 TTL 一起复制成目标键,整个过程在服务端完成。客户端用 GET 再 SET 也能做出类似效果,但要把 value 拉到应用侧再写回,网络流量与序列化开销都由自己承担,TTL 还得手动重建。COPY 一条命令完成这件事,并额外支持 DB 选项跨库复制、REPLACE 覆盖已有目标。
基本信息
| 语法 | COPY source destination [DB destination-db] [REPLACE] |
|---|---|
| 版本要求 | Redis 6.2.0 及以上 |
| 返回值 | 1 复制成功;0 目标已存在且未加 REPLACE |
| 适用平台 | Linux 自建实例、Redis Cluster、K8s 自建;部分云托管实例禁用该命令,用前先确认 |
| 权限要求 | 默认用户即可;ACL 需 keyspace 与 write 类权限 |
| TTL 行为 | 源键剩余 TTL 一并复制,不重置 |
典型使用场景
- 模板派生配置:以 template:config 为样板批量生成 config:<业务ID>
- 隔离验证:把线上键复制到另一个库上改,不动生产数据
- 大对象搬运:几十 MB 的 value 不必经过应用进程序列化
- 灰度对照:复制一份到旁路键,用新逻辑读副本做结果比对
- 现场留档:处置故障前先复制可疑键,保住原始数据
常用写法
常用写法
redis-cli COPY template:config config:1001 # 同库复制模板键
redis-cli COPY app:session:1001 app:session:1001:bak # 复制出一份观察用副本
redis-cli COPY template:config config:1002 REPLACE # 覆盖已存在的目标键
redis-cli COPY cache:warm cache:warm:db2 DB 2 # 复制到 2 号库
redis-cli TTL template:config # 记录源键剩余 TTL
redis-cli TTL config:1001 # 目标 TTL 应与源键一致参数逐项读法
| 参数 | 含义 | 注意 |
|---|---|---|
| source | 源键名 | 不存在时返回 0,不抛错 |
| destination | 目标键名 | 已存在且无 REPLACE 时返回 0 |
| DB n | 把目标写到第 n 号库 | 集群模式只接受 0 号库 |
| REPLACE | 覆盖已存在的目标键 | 不带它时旧值原样保留 |
TTL 属于被复制的内容:源键还剩 300 秒,副本也剩 300 秒,不会变成永久键。希望副本长期存在时,复制后再用 EXPIRE 或 PERSIST 调整。
COPY 在服务端同步执行,复制一个几百万元素的集合会让主线程持续工作,期间其他请求排队等待;批量派生模板键要分批并在低峰做。