3. 热点Key的定义与分类:热Key、大Key、热Slot、热节点
在Redis故障排查中,“热点”是一个统称,但实际场景下存在四种不同粒度的热点形态:热Key、大Key、热Slot、热节点。四者成因不同、影响范围不同,排查与治理手段也各有侧重。本节从定义出发,厘清四类热点的区别与联系,为后续案例实战打下基础。
核心认知:热Key是“访问频率高”,大Key是“数据体量大”,热Slot是“哈希槽负载倾斜”,热节点是“物理节点过载”。四者可能独立出现,也可能相互诱发。
3.1 热Key(Hot Key)
定义:在短时间内被大量客户端并发访问的单个Key。热Key是Redis最常见的性能杀手,通常表现为QPS(每秒查询数)突增,远超单个实例的处理能力。
典型特征:
- QPS > 10万/秒(视机器配置而定)
- CPU使用率飙升,单核打满
- 客户端出现大量超时或连接拒绝
- Redis慢查询日志中出现高频访问的同一Key
常见场景:
- 秒杀商品、爆款新闻、热搜榜单
- 报表导出服务中频繁查询的汇总Key
- 全局计数器、分布式锁
3.2 大Key(Big Key)
定义:单个Key存储的数据量过大,导致读写、网络传输、内存分配等操作耗时显著增加。大Key不一定是热Key,但大Key一旦被频繁访问,会加剧性能恶化。
典型特征:
- String类型Value > 10MB
- 集合类型(List/Hash/Set/Sorted Set)元素个数 > 1万
- 单个Key内存占用 > 100MB
- 删除或序列化该Key时导致Redis阻塞
常见场景:
- 缓存用户全量行为日志的Hash
- 存储大文本报表结果的String
- 未分页的全量数据集合
3.3 热Slot(Hot Slot)
定义:在Redis集群模式下,某个哈希槽(Hash Slot)承载的Key数量或访问量远高于其他槽位,导致该槽所在的主节点负载不均。热Slot是集群倾斜的中间表现形态。
典型特征:
- 集群节点间内存使用率差异 > 20%
- 某个节点的QPS是其他节点的3倍以上
- 集群reshard(重新分片)时该槽迁移耗时极长
常见场景:
- 业务Key命名未加随机后缀,导致大量Key落入同一槽
- 使用Hash Tag强制将相关Key聚集到同一槽,但未控制总量
- 热Key恰好落在某个槽,间接导致该槽变热
3.4 热节点(Hot Node)
定义:Redis集群中某个物理节点(主节点或从节点)因承载了过多热Slot或热Key,导致CPU、内存、网络带宽等资源成为瓶颈。热节点是集群层面最严重的热点形态,可能引发级联故障。
典型特征:
- 节点CPU使用率持续 > 80%
- 节点内存碎片率异常升高
- 节点网络出口带宽打满
- 该节点上的从节点复制延迟持续增大
常见场景:
- 多个热Slot集中分布在同一节点
- 大Key频繁读写导致节点IO过载
- 集群节点数较少,热点无法分散
3.5 四类热点的区别与联系
下表从关注维度、影响范围、排查手段、治理方向四个角度进行对比:
| 对比维度 | 热Key | 大Key | 热Slot | 热节点 |
|---|---|---|---|---|
| 关注维度 | 访问频率(QPS) | 数据体量(内存/元素数) | 槽位负载分布 | 节点资源利用率 |
| 影响范围 | 单个Key所在实例 | 单个Key所在实例 | 集群中部分节点 | 整个集群稳定性 |
| 排查手段 | hotkeys命令、monitor采样 | bigkeys命令、memory usage | cluster slots、节点QPS监控 | 节点CPU/内存/带宽监控 |
| 治理方向 | 本地缓存、读写分离、Key拆分 | 数据分片、压缩、淘汰 | 调整Hash Tag、reshard | 节点扩容、流量调度 |
四者之间的诱发关系:
- 热Key如果数据量大,会同时成为大Key,加剧节点压力。
- 大Key即使访问不频繁,一旦被扫描或迁移,也会导致热Slot。
- 热Slot聚集到同一节点,直接导致热节点。
- 热节点上的所有Key和Slot都会受到影响,形成恶性循环。
实战提醒:在报表导出服务中,最常见的链路是“热Key → 热Slot → 热节点”。例如,一个存储当日报表汇总的Key被频繁查询,该Key所在的Slot负载升高,进而导致该Slot所在节点CPU打满,最终影响该节点上所有其他业务。
3.6 四类热点关系示意图
下图展示了四类热点在Redis集群中的层级关系与转化路径:
3.7 四类热点在报表导出场景中的典型表现
以课程案例中的报表导出服务为例,四类热点可能同时出现:
| 热点类型 | 报表导出场景表现 | 排查线索 |
|---|---|---|
| 热Key | 某张热门报表的缓存Key被大量用户同时查询,QPS > 5万 | Redis hotkeys命令显示该Key访问次数异常 |
| 大Key | 某张报表结果存储为String,Value大小超过50MB | Redis bigkeys命令发现该Key内存占用最大 |
| 热Slot | 该大Key所在哈希槽的QPS是其他槽的10倍 | 集群监控发现该槽所在节点CPU飙升 |
| 热节点 | 该节点CPU持续100%,其他节点负载正常 | 节点监控显示网络带宽打满,从节点复制延迟 |
排查口诀:先看热Key找高频,再看大Key查体积;热Slot看分布,热节点看资源。四者层层递进,定位根因不遗漏。