Redis Pipeline + Lua 批量操作:把 100 次网络往返压成 1 次
引言 线上商品详情页有个接口,P99 稳定在 60ms,CPU 5%,GC 正常,数据库慢查询为零。压测报告看了三天没找到瓶颈,最后抓了一次链路: 商品详情页(一个请求要展示 100 个 SKU 的实时价格和库存) for (String skuId : skuIds) { // 100 次循环 String price = redis.get("sku:price:" + skuId); String stock = redis.get("sku:stock:" + skuId); } // 200 次 Redis 调用,耗时 98ms,占接口总耗时 80% 单次 get 0.5ms,看着不多;乘 200 次就是 100ms。而 Redis 服务端真正处理这 200 条命令花的时间,加起来不到 1ms——99% 的时间都花在"客户端发出去、服务端处理完、再传回来"的往返路上。 这不是 Redis 慢,是调用方式错了。消除往返有三把工具,能力边界完全不同: 手段核心作用原子性适用 原生命令(MGET/HMGET/MSET)一条命令拿多个 key单命令原子简单批量读写,最优先 ....