在高并发系统中,如果某个 Key 被大量访问,例如:
- 热门商品
- 秒杀库存
- 排行榜
- 首页推荐数据
就可能形成 热点 Key(Hot Key)。
热点 Key 会导致:
所有请求都打到同一个 Redis 节点
结果:
- 单节点 CPU 飙升
- 网络带宽耗尽
- Redis 延迟增加
- 系统整体性能下降
因此必须设计 热点 Key 解决方案。
一、什么是热点 Key
热点 Key 的特点:
某一个 Key QPS 极高
例如:
product:1001
假设:
QPS = 50000
所有请求都访问这个 Key。
即使 Redis Cluster:
这个 Key 也只在一个节点
导致:
单节点压力过大
二、热点 Key 解决方案
常见解决方案:
本地缓存
Key 拆分
多副本缓存
读写分离
缓存预热
三、本地缓存(最常用)
在应用服务器增加 本地缓存。
架构:
应用服务器
↓
本地缓存
↓
Redis
↓
数据库
流程:
请求
↓
本地缓存
↓
Redis
例如:
90%请求 → 本地缓存
10%请求 → Redis
Redis 压力下降:
90%
常见本地缓存:
- Caffeine
- Guava Cache
适用于:
- 热点数据
- 更新频率低
四、Key 拆分
如果一个 Key QPS 很高,可以拆成多个 Key。
例如原始 Key:
product:1001
拆分为:
product:1001:1
product:1001:2
product:1001:3
product:1001:4
客户端访问:
随机访问
例如:
hash(userId) % 4
这样:
请求分散到多个 Key
Redis 压力降低。
五、多副本 Key
将同一份数据存储多份。
例如:
rank:1
rank:2
rank:3
rank:4
客户端随机读取:
随机选择一个 Key
效果:
热点访问被分散
适用于:
- 排行榜
- 热门商品
- 推荐列表
六、读写分离
Redis 支持 主从复制。
架构:
Master
↓
Slave1
Slave2
Slave3
写操作:
Master
读操作:
Slave
例如:
1写 + 3读
读性能提升:
3倍
七、缓存预热
在系统启动时提前加载热点数据。
例如:
热门商品
热门排行榜
首页推荐
启动流程:
系统启动
↓
加载数据库数据
↓
写入 Redis
这样用户访问时:
直接命中缓存
避免瞬时流量冲击数据库。
八、热点 Key 自动检测
Redis 可以检测热点 Key。
例如:
redis-cli --hotkeys
或者使用:
- Redis Monitor
- Redis Slow Log
- Prometheus + Grafana
监控:
Key访问频率
提前发现热点。
九、架构级解决方案
在大型系统中通常采用 多级缓存架构:
客户端
↓
CDN
↓
本地缓存
↓
Redis
↓
数据库
效果:
CDN承担 50%
本地缓存承担 40%
Redis承担 9%
数据库承担 1%
系统整体稳定性大幅提升。
十、最佳实践总结
Redis 热点 Key 解决方案:
本地缓存
Key拆分
多副本缓存
读写分离
缓存预热
热点检测
核心思想:
分散访问压力
十一、面试高分回答总结
如果面试官问:
Redis 热点 Key 怎么解决?
可以这样回答:
Redis 热点 Key 是指某个 Key 的访问量非常高,导致单节点压力过大。通常可以通过本地缓存、Key 拆分、多副本缓存、读写分离以及缓存预热等方式解决,从而分散访问压力,提高系统整体性能和稳定性。



