站保站

服务市场
  • 网站市场
  • 单机游戏
  • 平台大厅
  • 转让市场
  • 发卡市场
  • 广告市场
  • 下载市场
  • 收录市场
  • 本站平台
    平台客服
    微信Q群



    平台微博/weibo    平台微信/公众号    平台抖音/快手   
    曝光台    保障    地图   
    上传资源 快速赚钱
    站保站    登录      |  注册  |  

    只需一步,快速开始!

     找回密码   |   协议
    热门搜索: 网站开发 App报毒 挖矿源码 代办资质

    Redis缓存穿透和缓存雪崩的分析与解决方案

    • 时间:2020-10-27 23:21 编辑:保暖大裤衩LeoLee 来源: 阅读:216
    • 扫一扫,手机访问
    摘要:

    一般情况下缓存和DB访问的关系

    缓存穿透

    指查询一个一定不存在的数据,由于缓存中没有该查询对象(缓存始终无法命中对应的数据),这时会去数据库查询数据,如果数据库中也没有对应的数据也无法写入缓存,在这种情况下,每一次查询不存在数据的请求都将去查询数据库,这就是缓存穿透

    造成影响:

    当在高并发的情况下,缓存穿透可能会拖慢数据库,进而拖慢整个系统,甚至宕机。

    解决办法:

    当在缓存中无法命中对应数据时,且访问数据库也没有查询到目标数据,这时向缓存中存入空结果。这样的情况下,每一次查询首先判断redis中是否有目标数据(即exist(String key)),key存在就直接返回缓存结果,即使缓存结果是空值。

    缓存雪崩

    当大量缓存在同一时间段内失效的时候,会在这段时间内引发大量数据库访问查询,给数据库带来较大的压力。

    解决办法:

    1. 在数据库访问层面,加锁/队列式的穿行访问
    2. 分析系统缓存实际情况(包括用户使用场景等),设计分布较为均匀的失效时间。
    3. 数据预热,在能遇见的并发高峰来临前,提前均匀的、有计划的更新缓存数据,防止在并发高峰期出现缓存大量失效的情况。
    4. 设置业务热点数据永不过期,只做缓存更新操作
    5. 在分布式数据库的情况下,将热点数据均匀分布,分散缓存雪崩后带来的单个数据库访问压力
    6. 访问限流(最不推荐)

    这里比较推荐通过使用 2 、3 、4 方法来预防解决缓存雪崩问题,加锁或者是队列式的访问控制,一定会带来性能的损耗,能提前避免的问题就尽量提前避免,最好不要等到意外发生了再做补救。

    合理加锁

    双重检测锁:

    1. public User selectById(String id) {
    2. User user = (User) hash.get(id);
    3. if (null == user) {
    4. synchronized (this) {
    5. //这里多一次缓存的检查是关键
    6. user = (User) hash.get(id);
    7. if (null == user) {
    8. user = //...查询数据库
    9. hash.put("user", user);
    10. }
    11. }
    12. }
    13. return user;
    14. }

    优点:当高并发,且缓存过期,又没有做热点数据预热的条件下,第一个线程访获得了锁对象,其他线程处于等待;在第一个线程查询数据库的时间内,大量线程挤压,当第一个线程的DB查询结果设置缓存后,其他挤压等待获得锁对象的线程依次拿到了锁,这时最关键的一步来了,再一次的检查缓存可以避免挤压的这些线程去做不必要的数据库访问

     

    • 全部评论(0)
    • 最新

    信息加载中,请等待

    微信客服(速回)

    微信客服(慢回)



    企业微信客服二维码
    联系我们
    平台客服: 平台QQ客服

    平台电话:400电话迁移中!

    平台邮箱:28292383@qq.com

    工作时间:周一至周五:早10:00 晚:18:00

    营业执照     网站ICP备案:鲁ICP备20027607号-1     鲁公网安备:37068702000078号     增值电信业务经营许可证、在线数据与交易处理业务许可证:鲁B2-20200681      © 2016-2024 站保站  https://www.zhanbaozhan.com/ 版权所有!      平台规范:   关于我们   广告合作   隐私条款   免责声明   法律声明   服务条款   网站地图   平台工单!