全栈工程师修炼指南
熊燚(四火)
Oracle 首席软件工程师
32206 人已学习
新⼈⾸单¥59
登录后,你可以任选4讲全文学习
课程目录
已完结/共 46 讲
全栈回顾 (1讲)
加餐 (1讲)
全栈工程师修炼指南
15
15
1.0x
00:00/00:00
登录|注册

22 | 赫赫有名的双刃剑:缓存(下)

LRU-K算法
基于队列长度控制
链表清空数据
缓存预热
限流
缓存预热
流量控制
用户侧API
核心API
数据变动规则
缓存数据的生命周期管理
页面模板中的Cache标签
Web容器的Filter
配置文件的注入
方法注解
编程方式
解决方法
解决方法
设计问题
解决方法
解决方法
核心要素
集成方式
LRU的致命缺陷
缓存容量失控
缓存雪崩
缓存穿透
缓存框架
缓存使用的问题
缓存

该思维导图由 AI 生成,仅供参考

你好,我是四火。
在上一讲中,我们介绍了缓存的本质和应用模式。今天我们继续讨论缓存,这一讲会结合一些实际项目,谈一谈缓存的使用会有哪些问题,以及缓存框架的一些通用性的东西。

缓存使用的问题

既然说缓存是“双刃剑”,那我们就必须要谈论它的另一刃——缓存使用可能带来的问题。

1. 缓存穿透

缓存穿透,指的是在某些情况下,大量对于同一个数据的访问,经过了缓存屏障,但是缓存却未能起到应有的保护作用。举例来说,对某一个 key 的查询,如果数据库里没有这个数据,那么缓存中也没有数据的存放,每次请求到来都会去查询数据库,缓存根本起不到应有的作用。
当然,这个问题也不难解决,比方说我们可以在缓存中对这个 key 存放一个空结果,毕竟“没有结果”也是结果,也是需要缓存起来的。还有一种缓解方法是使用布隆过滤器等数据结构,在数据库查询之前,预先过滤掉某些不存在的结果。
还有一种特殊情况也会造成缓存穿透的严重后果。一般的缓存策略下,往往需要先发生一次缓存命中失败,接着从实际存储(比如数据库)中得到结果,再回填到内存缓存中。但是,如果这个数据库查询过程比较慢,大量同一数据的请求像雨点一样几乎同时到来,就会全部穿透缓存,一并落到了数据库上,而那个时候最早的那个请求引发的缓存回填甚至都还没有发生,在这种情况下数据库直接就挂掉了,虽然缓存的机制本身看起来并没有任何问题。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

本文深入探讨了缓存在技术领域中的重要性以及可能带来的问题,包括缓存穿透、缓存雪崩和缓存容量失控。作者提出了解决这些问题的方法,如流量控制、缓存预热和基于队列长度的控制。此外,文章还介绍了缓存框架的集成方式和核心要素,以及对LRU算法的改进方案。通过深入了解这些问题及其解决方法,读者可以更好地应对缓存使用中可能遇到的挑战。 文章通过实际案例学习了缓存使用中的常见问题,并强调了缓存框架中的共性要素。读者被鼓励重点体会和理解缓存使用中的问题,以避免重复他人的错误。此外,文章还提出了两个问题供读者思考和讨论,以促进对缓存使用的深入思考和交流。 扩展阅读部分介绍了布隆过滤器、Ehcache和Spring的整合以及JSR-107,为读者提供了进一步学习的资源。 通过本文,读者可以快速了解缓存在技术领域中的重要性、可能遇到的问题以及解决方法,同时也得到了扩展阅读的引导,有助于深入学习相关内容。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《全栈工程师修炼指南》
新⼈⾸单¥59
立即购买
登录 后留言

全部留言(2)

  • 最新
  • 精选
  • leslie
    其实缓存的使用各种中间件存储使用:它已经比过去廉价多了。整改中间件存储都离不开缓存的使用。 简单的说,过去数据库的缓存设置的偏小,现在的设置值完全不同了;毕竟直接重新查询结果集的代价比从缓存池要大许多。数据库之上的各种库几乎都没有离开cache的使用:框架既是优化同样是束缚;用了框架你的创造力就局限了,在此之上想提升性能的空间就少了。 可能个人算是一路转型走过来:不是特别喜欢用框架;对于开发的要求同样是,能不用框架就不用框架;用框架则真正提升和改变的空间就小了束缚了。 缓存个人觉得还好吧:关键是设计的合理性、合理的分布式设计;如何压力的均衡。其实软硬件充分合理发挥效率优势扬长避短:断电最好的方式就是灾备;当一系列防患于未然做好-其实还好。

    作者回复: 👍

    2019-10-30
    3
  • mgxian
    布隆过滤器老师说反了吧!不存在准确率100 存在准确率不是100 它说没有见过你 就是一定没有见过你 它说见过你 其实可能没有见过你

    作者回复: 感谢提醒。对,说不存在是一定的;说存在是不一定的。已经知会编辑修正。

    2019-10-30
    2
    1
收起评论
显示
设置
留言
2
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部