1. 热点削峰概述
1.1 什么是热点 Key
在 Redis 缓存系统中,热点 Key 是指在短时间内被大量并发请求访问的同一个或同一组缓存键。这些 Key 通常对应着高流量业务场景,例如秒杀商品、爆款新闻、热门榜单、明星动态等。
典型特征:单个 Key 的 QPS 达到集群平均 QPS 的 10 倍以上,且请求集中在极短时间窗口内(秒级或毫秒级)。
| 业务场景 | 热点 Key 示例 | 峰值 QPS 量级 |
|---|---|---|
| 电商秒杀 | seckill:item:10001 |
10 万 ~ 100 万 |
| 社交热搜 | hot:topic:20250101 |
5 万 ~ 50 万 |
| 直播礼物 | gift:rank:room_888 |
3 万 ~ 30 万 |
| 签到活动 | sign:user:10086 |
1 万 ~ 10 万 |
1.2 热点带来的雪崩与击穿风险
热点 Key 如果没有被有效治理,会引发两种典型的缓存故障:
- 缓存击穿:热点 Key 在缓存中过期失效的瞬间,大量并发请求同时穿透到后端数据库。由于数据库的吞吐能力远低于 Redis,极易导致数据库连接池耗尽、慢查询堆积,甚至数据库宕机。
- 缓存雪崩:大量热点 Key 在同一时间段集中过期失效,或者 Redis 实例因热点 Key 压力过大而崩溃,导致海量请求直接打到数据库层,引发连锁故障。
风险对比:击穿是“单点失效”的瞬时冲击,雪崩是“批量失效”或“节点宕机”的全局灾难。两者都会造成服务降级或中断,且恢复时间往往长达数分钟。
1.3 削峰填谷的核心思想
削峰填谷 是一种流量治理策略,其本质是在请求的“波峰”时刻进行流量缓冲与平滑,将超出系统处理能力的请求暂存或延迟处理,在“波谷”时段再逐步消化,从而保护后端资源不被瞬时洪峰冲垮。
核心原则:不拒绝请求,但也不让请求同时到达。通过“排队 + 限流 + 异步”的组合手段,将突发流量转化为可控的匀速流量。
在 Redis 热点削峰场景中,削峰填谷通常通过以下三种机制实现:
- 本地缓存 + 分布式缓存分层:在应用层(JVM 本地缓存)拦截大部分热点读请求,减少对 Redis 的冲击。
- 请求队列与令牌桶:将写请求或穿透请求放入内存队列,以固定速率消费,避免瞬时并发。
- 异步批处理与合并写:将多个针对同一 Key 的写操作合并为一次批量写入,降低 Redis 的写入压力。
1.4 削峰填谷的适用边界
并非所有场景都适合削峰填谷。以下表格帮助判断是否应该引入该策略:
| 判断维度 | 适合削峰填谷 | 不适合削峰填谷 |
|---|---|---|
| 请求时效性 | 允许秒级或毫秒级延迟 | 要求微秒级实时响应 |
| 流量特征 | 突发性强、波峰波谷明显 | 流量平稳、无明显峰值 |
| 数据一致性 | 最终一致性可接受 | 强一致性、实时写入 |
| 业务容忍度 | 可接受排队或降级提示 | 必须全部立即成功 |
总结:热点削峰不是消灭流量,而是管理流量。通过“削峰填谷”将不可预测的突发流量转化为可预测的匀速流量,是保障 Redis 集群稳定性和数据库安全的核心手段。