Redis缓存穿透,缓存击穿,缓存雪崩原理及解决方案

缓存穿透

  要查询的数据,redis中没有,数据库中也没有,那么每一次的查询都要经过redis和数据库,redis几乎没有起到该有的作用。

  解决这个问题的方式一般认为有两种:

  第一种是从数据库查询不到时,给查询的key一个空值,存入redis,失效时间可以短一些,那么对同一个不存在的key,就没有缓存穿透的问题。

  第二种是对于可以确定的key值,取hash值存储起来,当要查询的key值不在hash表中,直接丢弃。

  第一种方式的缺点是当key值很多时,会很大程度上增加redis的存储压力,这种方式比较适合key变化不是很快的场景。

  第二种方式的缺点是key值要已知,类似于白名单,很多场景都不太适用。

缓存击穿

  一个很热的key值,从redis中失效清除后,突发的大量查询涌入数据库,导致数据库超负载。

  目前看到的解决方案,都是在数据库访问中加锁,控制数据库的访问量,防止数据库宕机。

缓存雪崩

  redis数据库不能正常工作(也有可能工作正常,但是命中率很低),导致所有的查询请求都跑到数据库中来。

  解决方案,对于redis宕机的,使用集群,分化风险;对于命中率很低的场景,可以提前缓存到redis中,场景类似双11要提前下单,然后等到双11当天结账。

posted @ 2020-04-19 16:34  ¥芝麻绿豆¥  阅读(183)  评论(0编辑  收藏  举报