redis的缓存雪崩、缓存穿透和缓存击穿

  

缓存雪崩:redis

好比给缓存中的key设置了统一的过时时间,而在过时时间点,有大量的请求进来,这个时候redis中没有用户请求的资源,因此全部的请求会所有拥到数据库,若是数据库有报警监测的话,可能会报一下警,而后数据库就挂掉了。若是这时候把数据从新起来,redis上仍是没有缓存这些内容,数据库仍是会被再一次击垮。数据库

解决方法:缓存

给key的过时时间设置一个随机值,让key的过时时间不集中到一块。这样即便有过时的,这样的压力,通常的redis集群都能扛下来。接口

缓存击穿:资源

某个key比较热点,当有大量的用户访问时,若是这个key在这期间失效的话,会形成缓存击穿。集群

解决方法:redis集群

能够设置热点数据和首页数据不过时,若是主页数据有更新的话,能够从数据库刷新缓存高可用

缓存穿透:请求

缓存穿透就是用户访问的数据在缓存中和数据库中都不存在。数据库的id都是从1自增长的,若是用户用户访问一个id为-1的数据或者id特别大的数据,缓存中和数据库中找不到这个数据,就会形成缓存穿透方法

解决办法:

在接口层进行数据校验,若是id<=0或者参数不合法,直接拦截。或者若是这个数据找不到的话,能够给这个key的value设置为null或者能够根据须要返回一个小可爱,您迷路了。

注:

① redis能够作高可用、集群、哨兵加主从,能够避免全盘崩溃② redis能够作持久化RDB+AOF,一旦重启,能够自动从磁盘上加载数据,快速恢复缓存数据③ 服务降级,进行数据限流(经过限流组件:这样用户可能单次访问不到页面,可是多刷几回就出来了) ,这样能够避免数据库被直接打死

相关文章
相关标签/搜索