15 | 缓存的使用姿势(三):缓存穿透了怎么办?
该思维导图由 AI 生成,仅供参考
什么是缓存穿透
- 深入了解
- 翻译
- 解释
- 总结
本文深入探讨了缓存穿透问题及解决方案,重点介绍了使用布隆过滤器来解决缓存穿透的方法。布隆过滤器是一种高效的数据结构,通过Hash算法和二进制数组实现对元素是否在集合中的判断。虽然存在误判和不支持删除元素的缺陷,但在缓存穿透问题上仍然具有重要价值。文章还提出了在处理热点缓存失效时的解决方案,包括启动后台线程和使用分布式锁。总的来说,本文通过深入的技术分析和解决方案探讨,为读者提供了对缓存穿透问题的全面理解和解决思路。 在解决缓存穿透问题时,本文提出了几种方案。首先是回种空值,这是一种简单且常见的解决思路,适用于空值缓存占据的空间可以接受的情况。其次是布隆过滤器,虽然引入了新的组件和一些复杂度,但在海量查询数据库中不存在数据的请求时具有重要价值。此外,针对极热点缓存数据穿透造成的“狗桩效应”,可以通过设置分布式锁或后台线程定时加载的方式来解决。最重要的是,要意识到数据库在扩展性、性能和并发能力上的劣势,因此核心目标在于减少对数据库的并发请求。 总的来说,本文为读者提供了全面的解决缓存穿透问题的思路和方法,同时也鼓励读者在日常工作中寻找更好的解决方案。通过深入的技术分析和解决方案探讨,本文为读者提供了对缓存穿透问题的全面理解和解决思路。
《高并发系统设计 40 问》,新⼈⾸单¥59
全部留言(76)
- 最新
- 精选
- 小虎置顶讲的很好,很透彻,实用。老师,那么这个过滤器在微服务环境下如何部署比较好?部署好了以后是否也可以起到防止洪水攻击带来的缓存穿透问题?
作者回复: 以单独服务部署比较好,我之前团队曾经改了一下redis源码来实现这个功能,利用redis的存储机制
2019-10-24317 - 公号-技术夜未眠置顶很实用,很赞
作者回复: 谢谢~
2019-10-21430 - jc9090kkk布隆过滤器可以用在一些资讯app的新闻展示中,给用户推送新的资讯用来过滤掉那些用户已经浏览过的记录
作者回复: 是的
2019-10-22435 - 长期规划老师,为什么会出现大量查询未注册用户的情况呢?是系统被攻击了?
作者回复: 可能存在扫描你的用户的爬虫请求
2019-10-2629 - QQ怪老师如何来监控缓存的命中率。
作者回复: 一般缓存会有cache miss和cache hit的统计信息,也可以自己打印日志统计
2019-10-2124 - jun.hai老师您好,请教个问题,文中讲到的缓存穿透跟缓存雪崩是一个概念么?如果不是那缓存雪崩的解决方案是什么呢?谢谢
作者回复: 穿透指的是缓存中没有数据,需要到数据库中去取;雪崩指的是一个缓存节点的故障导致全局故障,两者是不同的 之前提的一致性hash中实现虚拟节点就是一种避免雪崩的方法
2019-12-03719 - 小喵喵1.这两节都有提到分布式锁,请问下分布式锁和一般锁的有什么区别呢? 2.缓存适合存放什么样子的数据呢?还是数据库里面的所有数据都可以放入缓存呢? 谢谢
作者回复: 1. 一般的锁是进程中的锁,可以同步一个进程中的多个线程;分布式锁可以同步多个进程 2. 缓存适合放经常访问的热数据,不能放全量数据,而且也放不下
2019-10-21217 - 约书亚bloom filter这个用法会在各种文章教程中提出,但我一直有个疑问想求教一下:基于redis这种存储的bloom filter有没有成熟的方案?因为我觉得毕竟redis不是一种完全可靠的存储,一旦crash理论上有可能丢数据,在用户的那个案例中,一旦应该出现在bloom filter中的数据丢失了,就意味着永远也查不出这个用户来了。那是否我们还应该启动一个监控进程,一旦发现redis crash了,要重新构建bloom filter呢? 回到思考题,我现在觉得文章中的三个方案都只能解决部分场景的问题,有时候需要配合使用。除此之外,合理的数据库连接池大小以及服务限流也能起到最后防线的作用吧?
作者回复: bloom filter需要自研,可以基于redis持久化存储到硬盘上 连接池应该解决不了问题,因为链接不是无限的;限流是有损的
2019-10-2159 - 楼下小黑哥布隆过滤器单独部署服务,服务启动时需要初始化数据,将数据库中数据初始化到过滤器中。后续将布隆过滤器定期写到磁盘中,防止服务重启导致丢失。 请教下老师,文中说的布隆过滤器是否如上上面说部署?
作者回复: 是的
2019-10-238 - longslee对不起老师给您丢脸了,有面试官问到如何避免缓存穿透,我一下懵了,因为我觉得缓存是可以穿透的,结果他意思应该跟您这一节课差不多,我竟然没想起布隆过滤器。
作者回复: 没关系,再反复看看专栏的内容,里边都是我多年工作的经验总结,覆盖面还是比较大的……预祝下次面试好运🍀
2020-07-135