Redis 缓存雪崩和缓存穿透问题

缓存雪崩

  简介:缓存同一时间大面积的失效(热点数据同时过期失效或者宕机),所以,后面的请求都会落到数据库上,造成数据库短时间内承受大量请求而崩掉。

                  如果缓存因某种原因发生了宕机,那么原本被缓存抵挡的海量查询请求就会像疯狗一样涌向数据库。此时数据库如果抵挡不了这巨大的压力,它就会崩溃

解决办法:

  • 事前:尽量保证整个 redis 集群的高可用性,发现机器宕机尽快补上。

                     选择合适的内存淘汰策略,让失效时间错开,这样能够避免同时失效。

                    预热: 上线之前,缓存预先存储一些热点数据。

  • 事中:本地ehcache缓存 + hystrix限流&降级,避免DB崩掉。
  • 事后:利用 redis 持久化机制保存的数据尽快恢复缓存
 
 

缓存穿透

业务系统访问压根就不存在的数据,就称为缓存穿透。

如果存在海量请求查询压根就不存在的数据,那么这些海量请求都会落到数据库中,数据库压力剧增,可能会导致系统崩溃

简介:一般是黑客故意去请求缓存中不存在的数据,导致所有的请求都落到数据库上,造成数据库短时间内承受大量请求而崩掉。

  解决办法:

  • 有很多种方法可以有效地解决缓存穿透问题,最常见的则是采用布隆过滤器,将所有可能存在的数据哈希到一个足够大的bitmap中,一个一定不存在的数据会被 这个bitmap拦截掉,从而避免了对底层存储系统的查询压力。
  • 另外也有一个方法,如果一个查询返回的数据为空(不管是数 据不存在,还是系统故障),我们仍然把这个空结果进行缓存,但它的过期时间会很短,最长不超过五分钟。
posted @ 2019-12-26 17:46  刘大飞  阅读(221)  评论(0编辑  收藏  举报