讲一讲雪崩,击穿,穿透

      在业务系统中,Http请求时,想要获取某个高频数据,一般先从缓存中获取,如果缓存中不存在,就从数据库中查询,如果查询到结果就将数据保存到缓存中在返回结果,那么在这个过程中使用的缓存一般会出现几种常见的问题,即击穿、雪崩和穿透。

  • 缓存击穿

     缓存击穿值得时某个Key一直扛着高并发,例如字典数据,那如果这个key在某个时间内托然失效了呢?那所有的请求立马会直接查询数据库,如果请求数够大,,很可能直接将数据库击垮。

    解决方法: key不设置过期时间,如果该key数据更新了,那么通过互斥锁的方式将其更新,保证数据的一致性,牺牲一点点效率。

  • 缓存雪崩

     缓存雪崩: 某个时间节点,大量的key失效,导致大量的请求从缓存中获取不到数据而去请求数据库,因为大量的key失效,必然导致大量请求,那么数据库瞬间压力剧增,必然导致数据库宕机, 在这种情况下重启时没有用的,重启同样会大量请求涌入,瞬间宕机。

     解决方法:

    1. 加随机值即设置key的时间时再加一个随机值

    2. 加锁 

  • 缓存穿透

       缓存穿透的意思就是某个不存的key一直被访问,结果发现数据库也没有该记录,最终导致访问该key的所有请求都直接抵达数据库。如果在高并发的情况下就容易将数据库搞垮。

       

解决方法:

缓存空数据:假设某个key数据并不存在,那么存一个NULL并设置过期时间,例如:id =10000的记录不存在,然后本次访问没有查询到数据,缓存中存入的(key, value)就是(10000, NULL),如果新增了id为10000的记录,如果不设置过期时间,那他永远也获取不到。

布隆过滤器:

将数据库中所有的查询条件,放入布隆过滤器中,当一个查询请求过来时,先经过布隆过滤器进行查,如果判断请求查询值存在,则继续查;如果判断请求查询不存在,直接丢弃

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值