SET rebuild:product:1001 1 NX EX 5 GET product:1001 DEL rebuild:product:1001
把一个热点键手动删掉,同一秒数据库上冒出三百条一样的 SQL,接口整体被拖慢,耗时翻倍。这类现象通常不是突然出现的,往前翻半天日志能看到苗头。
追下去是这么回事:缓存没命中时每个请求都各自去查库再回填,中间缺少一个只放一条请求进去重建的闸门,回源次数直接等于并发数。
「缓存重建并发控制」改完先别急着全量,挑一台机器放半天,真有问题这段时间就能看出来。权限不要一口气开到最大,先加到够用再往上试,范围小才好收。
把复现步骤压到三条以内,交给同事也能跑出来,才算真的定位清楚。改动写完就同步给同事,下一个人踩同一个坑,成本还是你的。
处理上按这个顺序:回源前用 SET NX 抢一个短 TTL 的重建标记;没抢到的线程睡几十毫秒重读缓存 还没有再查库;重建失败要主动删标记 否则请求会一直空等。
确认没问题再收工,再删一次热点键,库里同样的 SQL 只出现一条,接口响应正常。
