在高并发系统中,如果某个 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 拆分、多副本缓存、读写分离以及缓存预热等方式解决,从而分散访问压力,提高系统整体性能和稳定性。