Redis:Hot Key问题


关键词

  • 发现:(预估,客户端统计,redis自带命令,大数据流式计算)
  • 处理:(本地缓存,add节点负载,限流熔断保护)

一、Redis:Hot Key问题

当有大量的请求(几十万)访问某个Redis某个key时,由于流量集中达到网络上限,从而导致这个redis的服务器宕机。造成缓存击穿,接下来对这个key的访问将直接访问数据库造成数据库崩溃,或者访问数据库回填Redis再访问Redis,继续崩溃。

redis 大key 热key redis热key问题_redis 大key 热key

二、如何发现热key

1、预估热key,比如秒杀的商品、火爆的新闻等

2、在客户端进行统计,实现简单,加一行代码即可

3、如果是Proxy,比如Codis,可以在Proxy端收集

4、利用Redis自带的命令,monitor、hotkeys。但是执行缓慢(不要用)

5、利用基于大数据领域的流式计算技术来进行实时数据访问次数的统计,比如 Storm、Spark Streaming、Flink,这些技术都是可以的。发现热点数据后可以写到zookeeper中

redis 大key 热key redis热key问题_big key_02

三、如何处理热Key

1、变分布式缓存为本地缓存
发现热key后,把缓存数据取出后,直接加载到本地缓存中。可以采用Ehcache、Guava Cache都可以,这样系统在访问热key数据时就可以直接访问自己的缓存了。(数据不要求时时一致)

2、在每个Redis主节点上备份热key数据,这样在读取时可以采用随机读取的方式,将访问压力负载到每个Redis上。

3、利用对热点数据访问的限流熔断保护措施
每个系统实例每秒最多请求缓存集群读操作不超过 400 次,一超过就可以熔断掉,不让请求缓存集群,直接返回一个空白信息,然后用户稍后会自行再次重新刷新页面之类的。(首页不行,系统友好性差)通过系统层自己直接加限流熔断保护措施,可以很好的保护后面的缓存集群。

  • 秒杀:没有秒杀到(熔断)
  • 首页面:需要给给回复