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


      

    缓存雪崩:

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

    解决方法:

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

    缓存击穿:

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

    解决方法:

    可以设置热点数据和首页数据不过期,如果主页数据有更新的话,可以从数据库刷新缓存

    缓存穿透:

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

    解决办法:

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

    注:

    ① redis可以做高可用、集群、哨兵加主从,可以避免全盘崩溃
    ② redis可以做持久化RDB+AOF,一旦重启,可以自动从磁盘上加载数据,快速恢复缓存数据(恢复数据时只需把备份文件放到redis的安装目录即可)
    ③ 服务降级,进行数据限流(通过限流组件:这样用户可能单次访问不到页面,但是多刷几次就出来了) ,这样可以避免数据库被直接打死

  • 相关阅读:
    HTML5之Canvas影片广场
    iOS英语—》中国本土化,如调用专辑,摄像头的变化“cancel”,“photos”至“撤消”,“摄像头”
    约瑟夫问题解决
    2014在百度之星资格赛的第二个问题Disk Schedule
    2015第30周二
    2015第30周一
    2015第29周日
    2015第29周六Spring
    2015第29周五AOP
    2015第29周四
  • 原文地址:https://www.cnblogs.com/cedarlip/p/11858401.html
Copyright © 2020-2023  润新知