什么是热key
redis中的某个key访问量过大
热key导致的问题
某个 Key 的数据一定是存储到后端某台服务器的 Redis 单个实例上(只说主实例),如果对这个 Key 突然出现大量的请求操作,会导致流量过大,导致到达这个redis实例的上限,即CPU到达100%,或者是网卡流量达到上限等,进而影响这个key以及这个redis实例上的其他key的请求,严重可能导致实例宕机。即出现超时等情况,影响服务稳定性、可靠性等。如果redis实例挂了,可能导致其他问题,如果redis作为缓存使用,redis实例挂了,可能导致大量请求到数据库上,导致数据库雪崩,拒绝服务等。
如何解决?
先分析原因
- 流量过大
- 请求都打到同一个实例上
那么问题确定了,接下来就说明一下如何解决
如何解决流量过大?
核心就是把流量兜在上游。即加缓存,不命中缓存的才到redis下游。可以在上游加本地缓存。这个上游可能是请求的服务本身或者proxy层
如何解决请求都打到同一个实例上
- 将key打散,即一个key变成多个key,下面大致写一下
//生成随机数
random :=