美文网首页
缓存问题总结

缓存问题总结

作者: packet | 来源:发表于2019-04-17 11:36 被阅读0次

    1)缓存穿透
    故意查询在cache和db中根本都不存在的数据。
    如果非法key的数量不多,可以缓存null。如果很多的话,使用布隆过滤器判断key是否在合法名单中。
    其他的类型场景有Hbase 中使用它去判断数据是否在磁盘上。还有在爬虫场景判断url 是否已经被爬取过。
    注意,布隆过滤器有一个小小的误识别率,某个非法key也可能被认为是在合法名单中。


    2)缓存击穿
    在某个时刻,key刚好过期,这时候大量相关查询过来,都会打到数据库上。
    解决方案是使用互斥锁,第一个线程拿到锁后,其他线程需要等待。第一个线程存取到缓存之后,其他线程直接走缓存即可。

    3)缓存雪崩
    大规模的缓存失效,比如缓存宕机。

    1. 增强可用性,如果是redis,可使用sentinel + 主从结构
    2. 限流降级:使用 Hystrix进行限流 & 降级 ,比如一秒来了5000个请求,我们可以设置假设只能有一秒 2000个请求能通过这个组件(数据库的的阈值),那么其他剩余的 3000 请求就会走限流逻辑。

    4)热点数据集中失效

    1. 设置key的过期时间,使用某个范围内的随机值
    2. 互斥锁。但会减小吞吐量。

    鸣谢:关于【缓存穿透、缓存击穿、缓存雪崩、热点数据失效】问题的解决方案

    相关文章

      网友评论

          本文标题:缓存问题总结

          本文链接:https://www.haomeiwen.com/subject/pypgwqtx.html