22 | 赫赫有名的双刃剑:缓存(下)
四火
该思维导图由 AI 生成,仅供参考
你好,我是四火。
在上一讲中,我们介绍了缓存的本质和应用模式。今天我们继续讨论缓存,这一讲会结合一些实际项目,谈一谈缓存的使用会有哪些问题,以及缓存框架的一些通用性的东西。
缓存使用的问题
既然说缓存是“双刃剑”,那我们就必须要谈论它的另一刃——缓存使用可能带来的问题。
1. 缓存穿透
缓存穿透,指的是在某些情况下,大量对于同一个数据的访问,经过了缓存屏障,但是缓存却未能起到应有的保护作用。举例来说,对某一个 key 的查询,如果数据库里没有这个数据,那么缓存中也没有数据的存放,每次请求到来都会去查询数据库,缓存根本起不到应有的作用。
当然,这个问题也不难解决,比方说我们可以在缓存中对这个 key 存放一个空结果,毕竟“没有结果”也是结果,也是需要缓存起来的。还有一种缓解方法是使用布隆过滤器等数据结构,在数据库查询之前,预先过滤掉某些不存在的结果。
还有一种特殊情况也会造成缓存穿透的严重后果。一般的缓存策略下,往往需要先发生一次缓存命中失败,接着从实际存储(比如数据库)中得到结果,再回填到内存缓存中。但是,如果这个数据库查询过程比较慢,大量同一数据的请求像雨点一样几乎同时到来,就会全部穿透缓存,一并落到了数据库上,而那个时候最早的那个请求引发的缓存回填甚至都还没有发生,在这种情况下数据库直接就挂掉了,虽然缓存的机制本身看起来并没有任何问题。
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
- 深入了解
- 翻译
- 解释
- 总结
本文深入探讨了缓存在技术领域中的重要性以及可能带来的问题,包括缓存穿透、缓存雪崩和缓存容量失控。作者提出了解决这些问题的方法,如流量控制、缓存预热和基于队列长度的控制。此外,文章还介绍了缓存框架的集成方式和核心要素,以及对LRU算法的改进方案。通过深入了解这些问题及其解决方法,读者可以更好地应对缓存使用中可能遇到的挑战。 文章通过实际案例学习了缓存使用中的常见问题,并强调了缓存框架中的共性要素。读者被鼓励重点体会和理解缓存使用中的问题,以避免重复他人的错误。此外,文章还提出了两个问题供读者思考和讨论,以促进对缓存使用的深入思考和交流。 扩展阅读部分介绍了布隆过滤器、Ehcache和Spring的整合以及JSR-107,为读者提供了进一步学习的资源。 通过本文,读者可以快速了解缓存在技术领域中的重要性、可能遇到的问题以及解决方法,同时也得到了扩展阅读的引导,有助于深入学习相关内容。
仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《全栈工程师修炼指南》,新⼈⾸单¥59
《全栈工程师修炼指南》,新⼈⾸单¥59
立即购买
© 版权归极客邦科技所有,未经许可不得传播售卖。 页面已增加防盗追踪,如有侵权极客邦将依法追究其法律责任。
登录 后留言
全部留言(2)
- 最新
- 精选
- leslie其实缓存的使用各种中间件存储使用:它已经比过去廉价多了。整改中间件存储都离不开缓存的使用。 简单的说,过去数据库的缓存设置的偏小,现在的设置值完全不同了;毕竟直接重新查询结果集的代价比从缓存池要大许多。数据库之上的各种库几乎都没有离开cache的使用:框架既是优化同样是束缚;用了框架你的创造力就局限了,在此之上想提升性能的空间就少了。 可能个人算是一路转型走过来:不是特别喜欢用框架;对于开发的要求同样是,能不用框架就不用框架;用框架则真正提升和改变的空间就小了束缚了。 缓存个人觉得还好吧:关键是设计的合理性、合理的分布式设计;如何压力的均衡。其实软硬件充分合理发挥效率优势扬长避短:断电最好的方式就是灾备;当一系列防患于未然做好-其实还好。
作者回复: 👍
2019-10-303 - mgxian布隆过滤器老师说反了吧!不存在准确率100 存在准确率不是100 它说没有见过你 就是一定没有见过你 它说见过你 其实可能没有见过你
作者回复: 感谢提醒。对,说不存在是一定的;说存在是不一定的。已经知会编辑修正。
2019-10-3021
收起评论