首页/数据/Redis 进阶速查/redis-cli --pipe 高速批量导入
性能与排障129 条

redis-cli --pipe 高速批量导入

redis-cli --pipe 把标准输入里的 RESP 协议数据批量灌入实例,用于大规模数据导入与迁移场景。

Redis 进阶速查数据更新于 2026-10-13

--pipe 是什么

redis-cli --pipe 把标准输入里的协议数据以最快速度灌进实例,省掉逐条往返,用于批量写入与数据导入。它读取的是 Redis 能解析的协议字节流,导入结束后打印 errors 与 replies 两行统计,用来确认有没有命令被拒。它没有事务语义,中途断开时前面的命令已经生效。

基本信息

用法cat data.txt | redis-cli --pipe
输入格式RESP 协议数据,需以 \r\n 结尾
目标实例用 -h、-p、-n 指定主机、端口与库
结束输出errors 与 replies 两行统计
事务语义无,逐条执行,失败不回滚
限速手段无内置开关,靠分批导入控制节奏

典型使用场景

  • 批量灌数据:把离线生成的键值一次导入测试或预发环境
  • 数据迁移:小规模数据集跨实例搬运,不需要复制拓扑
  • 压测前造数据:快速铺满指定规模的键空间
  • 故障演练后重建:把备份导出的数据重新灌回实例
  • 校验工具链:确认生成的数据文件本身格式正确

最小示例

最小示例
# 生成 RESP 格式的 1000 条 SET,每条三行参数、\r\n 结尾
awk 'BEGIN{for(i=1;i<=1000;i++) printf "*3\r\n$3\r\nSET\r\n$5\r\nk:%05d\r\n$5\r\nv:%05d\r\n", i, i}' > data.txt
cat data.txt | redis-cli -h 127.0.0.1 -p 6379 --pipe   # 全速导入
redis-cli DBSIZE                                        # 导入后核对键数量
redis-cli GET k:00042                                   # 抽样校验内容

输出怎么读

输出或现象含义动作
errors: 0, replies: N全部命令被接受与 DBSIZE 核对数量后收工
errors 大于 0部分命令被拒找格式或类型错误,修正数据后重跑
连接中断且无输出中途失败,前面已执行靠键数与抽样定位断点后幂等重跑
replies 远超预期文件被重复执行或含重复命令导入前去重,重跑前先清理
--pipe 不做事务:中途失败不会回滚。重跑前确认命令是幂等的(SET、HSET 这类是),否则要先清理目标键或改用带校验的迁移工具。
导入期间内存与主库压力上升明显,建议低峰执行并切成多份;分批除了降低峰值,也让失败重试的代价小得多。
不要把没验证过的数据直接灌进生产主库:先在测试实例跑一遍,确认 errors 为 0 再上,避免把脏数据一次性铺开。

易错点

  • 以为 --pipe 是原子操作:中途断开后部分命令已生效,必须能按幂等方式重跑
  • 数据格式有错就上生产:会产生大量错误且难以回收,先在测试实例验证 errors 为 0
  • 导入前不核对键数量:丢批和重复都不容易被发现,DBSIZE 与抽样式校验是必需的
  • 一次性导入超大文件:内存与主库压力同时飙升,失败重试代价极高,应分批
  • 在 --pipe 上找限速参数:它没有速率控制,限速要在上游做或改成分批导入

数据来源与参考

  • Redis 官方文档:--pipe 批量导入
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌