大家好,我是31 岁、依旧热爱折腾技术的小米。
有一次,我凌晨两点被拉进一个紧急会议。线上没挂,接口也没超时,但业务同学一句话把我整清醒了:“历史数据导入 Redis,要 6 个小时,老板等不了。”
那一刻,我脑子里只剩一个问题:Redis,不就是个快得离谱的内存数据库吗?怎么插个几千万条数据,比我下班还慢?
后来,这个问题几乎成了我参加社招面试时的“保留节目”:Redis 如何做大量数据插入?
如果你也在面试中被问到这个问题,或者你真的遇到过“Redis 批量写入慢到怀疑人生”的场景,这篇文章,你一定要看到最后。
为什么“for 循环 + SET”一定会翻车?
我们先从最容易踩坑的方式说起。很多人第一次往 Redis 灌数据,代码大概长这样:
你敲下回车,心想:
- Redis 单线程、内存操作、QPS 几万起步
- 100 万条数据,分分钟的事
但现实是:
- CPU 占用不高
- Redis 没有明显压力
- 程序却慢得像在给 Redis 写情书
问题出在哪?
Redis 慢,不是慢在“算力”,而是慢在“来回跑腿”
我后来给新人讲 Redis 批量插入时,都会打一个比喻。Redis 就像一个效率极高的仓库管理员:
- 他干活非常快
- 但每接一个指令,都要你亲自跑到仓库门口说一句话
如果你是这样干的:
- 跑过去 → “存一箱货” → 跑回来
- 跑过去 → “再存一箱” → 跑回来
- ……
那么再快的仓库管理员,也会被你拖垮。
Redis 普通写入的真实成本
一次 SET 命令,至少包含:
- 客户端到 Redis 的网络传输
- Re