Redis 批量写入优化:从逐条 SET 到 pipeline 的 10 倍提升

数据库Redis 发布于 2026-08-02 · 分类:数据库 · 阅读 2,740

批量灌数据时,最容易被忽略的是网络往返。每条命令都「发一个包、等一个回包」,哪怕 Redis 处理只要微秒级,RTT 也会把吞吐压到几千 QPS。

三种写法对比(伪代码)

# 1) 逐条:N 次 RTT
for kv in items: r.set(kv.k, kv.v)

# 2) pipeline:攒一批一起发,RTT 从 N 次降到 N/批大小 次
pipe = r.pipeline()
for kv in items: pipe.set(kv.k, kv.v)
pipe.execute()

# 3) Lua:在服务端原子执行,适合「读-算-写」
r.eval("for i,k in ipairs(KEYS) do redis.call('SET', k, ARGV[i]) end", ...)

关键区别

实测

同样 10 万条小 KV:逐条约 8 秒,pipeline(每批 1000)约 0.7 秒,提升 10 倍以上,瓶颈从网络转到了 Redis 单线程本身。

— 本文为个人运维笔记,如有疏漏欢迎指正。