zoukankan      html  css  js  c++  java
  • redis缓存的穿透和雪崩

    最近写项目 用到redis,想要把其中的主要问题和大家分享一下:

        首先是  穿透  

               个人的理解因为查询一个不存的数据是,因为第一次查询是到数据库,所以要查询这个不存的数据时会越过redis

        直接去数据库查询,所以才会形成穿透;

    解决办法:

          最常见的是布隆过滤器,将所有的数据哈希到一个足够大的bitmap中,不存在的数据会被bitmap掉,

    还有一种方法就是将查询结果不论是不是空都存入缓存,不过将为空的缓存时间减短,不超过5分钟。。

    雪崩

      是和穿透有很大联系的,在缓存失效的这段时间,发生大量的穿透,所有的查询到达服务器,形成雪崩

    解决办法

    1. 在缓存失效后,通过加锁或者队列来控制读数据库写缓存的线程数量。比如对某个key只允许一个线程查询数据和写缓存,其他线程等待。
    2. 可以通过缓存reload机制,预先去更新缓存,再即将发生大并发访问前手动触发加载缓存
    3. 不同的key,设置不同的过期时间,让缓存失效的时间点尽量均匀
    4. 做二级缓存,或者双缓存策略。A1为原始缓存,A2为拷贝缓存,A1失效时,可以访问A2,A1缓存失效时间设置为短期,A2设置为长期。
  • 相关阅读:
    day10函数名称空间与作用域(3)
    day10函数参数使用(2)
    day10函数基础(1)
    文件处理
    vue打包时semver.js版本报错
    js修改日期
    vue click事件获取当前元素属性
    js截取关键字之后的字符串
    css 清除浮动
    纯CSS绘制三角形
  • 原文地址:https://www.cnblogs.com/01aa/p/7281787.html
Copyright © 2011-2022 走看看