热点key定义
某个特定key某一时间段突然被大量访问,比如秒杀,热点等。这样会造成流量过于集中,达到例如Redis单实例瓶颈(一般是10W OPS级别),或者物理网卡上限,从而导致这台redis的服务器扛不住,导致宕机,甚至从新缓存之后另一个分片被打挂。
如何发现热点key
- 根据业务特点,比如秒杀,能预估出热点key
- 客户端收集,添加统计代码
- 服务端收集,通过接口代理等,统计热点key
- 使用Redis自带命令分析
解决方案
使用二级缓存
例如使用 guava-cache,或者 ehcache,或者最常用的集合 Hash 等,发现热点key之后,将这些热点key加载到JVM中(可以是堆内,也可以是堆外)作为本地缓存。访问这些key时直接从本地缓存获取即可,不会直接访问到redis。
备份热点key
将热点key添加某个随机参数后使得热点key的值被分散存储到不同Redis分片上,访问时添加随机参数,即可随机在某台机器上取值。