技术专题讨论历史
- 《技术专题讨论第一期总结:微服务中网关(API Gateway)的技术选型》 www.spring4all.com/article/336
- 《技术专题讨论第二期总结:如何对 JPA 或者 MyBatis 进行技术选型》 www.spring4all.com/article/391
- 《技术专题讨论第三期总结:微服务消息中间件的技术选型》 www.spring4all.com/article/416
- 《技术专题讨论第四期总结:漫谈分布式锁》www.spring4all.com/article/528
论系统架构设计中缓存的重要性
解耦是计算机系统架构设计中最常用的手段,那么缓存就必将在计算机系统中无处不在。使用缓存将大大提高我们系统的性能。而缓存用空间换时间的方式解决问题,而空间不可能无限使用,使用缓存我们将考虑如何存储,如何使用,如何提高命中率,如何确定有效的更新策略、更有如何保证数据一致性、自身可用性可维护性等等。
第五期的就系统架构设计中缓存的重要性持续了一个多星期,这期的讨论也是长篇评论,业界专家、大牛的展开了讨论和自己对缓存的理解,每个评论都分析的很全面!文字、图、代码相结合,真是意犹未尽。
下面就依次带大家来看看这些总结:
状元回答(还是来自网红大牛flychao88)
网红”飞超爸爸”三连击,继续凭借完美的回答,登顶支持首位
他首先从三方面问题来讨论缓存:
1、缓存穿透
2、缓存并发
3、缓存失效
并对缓存穿透和缓存并发提供了解决问题的思路
接下去分析了热点缓存的解决方案。从缓存的使用背景,到思路解析,图例代码结合,循序渐进
最后谈到了实现缓存最终一致性的二种方案
1、重客户端
从写入缓存到读缓存两方面来解析说明如何保证数据一致性
- 应用同时更新数据库和缓存
- 如果数据库更新成功,则开始更新缓存,否则如果数据库更新失败,则整个更新过程失败。
- 判断更新缓存是否成功,如果成功则返回
- 如果缓存没有更新成功,则将数据发到MQ中
- 应用监控MQ通道,收到消息后继续更新Redis
2、客户端数据库与缓存解耦
- 应用直接写数据到数据库中。
- 数据库更新binlog日志。
- 利用Canal中间件读取binlog日志。
- Canal借助于限流组件按频率将数据发到MQ中。
- 应用监控MQ通道,将MQ的数据更新到Redis缓存中
榜眼回答(来自duqicauc)
杜琪兄从三方面来讲解了缓存
1、例子 & 使用场景:
CPU中的L1、L2缓存,是将内存中的数据缓存在寄存器中
内存中的数据,是将磁盘等外存设备中的数据缓存在内存中
在网络架构中,DNS解析规则会在每个计算机节点缓存一份;
在分布式网络系统中,缓存更是无处不在:(1)对静态页面的缓存;(2)服务端对某些请求数据的缓存(包括本地缓存和分布式缓存);(3)客户端对服务器端数据的缓存,例如我们的头像等信息;
2、在Java后端开发中,常见的缓存工具和框架列举如下:
本地缓存:Guava LocalCache、Ehcache、Caffeine
分布式缓存:Tair、Redis
这些工具我只用过Guava LocalCache、Tair和Redis,其他两个本地缓存没有用过,据我所知,Ehcache的功能更加丰富,Caffeine的性能要比Guava LocalCache好,更多的请其他大神补充啦。
当我们决定将缓存加入系统中时,也要做好随之而来的系统复杂性问题,常见的问题可列举如下:
3、使用缓存带来的问题:
缓存何时写入?
缓存如何失效?
缓存和DB的一致性如何保证?
多级缓存有什么最佳实践?
如何避免缓存穿透问题?
探花回答(来自luyunfeng)
luyunfeng更是夸张的从10方面来描述缓存的重要性以及解决方案
1、什么才能算redis高可用集群架构?
2、如何支撑高性能以及高并发到极致?同时给缓存架构最后的安全保护层?
3、高并发场景下,如何解决数据库与缓存双写的时候数据不一致的情况?
4、如何解决大value缓存的全量更新效率低下问题?
5、如何将缓存命中率提升到极致?
6、如何解决高并发场景下,缓存重建时的分布式并发重建的冲突问题?
7、如何解决高并发场景下,缓存冷启动MySQL瞬间被打死的问题?
8、如何解决热点缓存导致单机器负载瞬间超高?
9、如何解决分布式系统中的服务高可用问题?避免多层服务依赖因为少量故障导致系统崩溃?
10、如何应用分布式系统中的高可用服务的高阶技术?
进士回答(来自lianggzone)
梁大大也来凑热闹啦。
首先介绍了使用Redis缓存的使用场景,分别从时效性、访问频率、计数器、社交列表、记录用户判定信息、交集、并集和差集、热门列表与排行榜、热门列表与排行榜、消息队列来进行场景的介绍
接下来讨论了使用缓存的合理性,并分别从热点数据,缓存才有价值、频繁修改的数据,需要看情况考虑使用缓存、数据不一致性、缓存更新机制、缓存更新机制、缓存服务降级、缓存穿透、缓存预热方面来进行总结,非常棒。
总结
本次的总结,还有lexburner、務急不僅、duqicauc等大牛们的精彩回答,想要了解更多的内容,请移步漫谈分布式锁专题讨论贴,评论区的繁荣景象值得大家一阅:www.spring4all.com/question/17…
后续,社区将会继续整理评论区各位大牛的回答,并整理成文章,组成一个缓存相关的系列分析给大家。
相关推荐:
社区发布的系列教程:
Spring For All 社区 Spring 官方教程翻译:www.spring4all.com/article/558
社区 Spring Boot 从入门到进阶系列教程:www.spring4all.com/article/246
社区
Spring Cloud 从入门到进阶系列教程:www.spring4all.com/article/320
社区 Spring Security 从入门到进阶系列教程:www.spring4all.com/article/428
社区
Spring Data JPA 从入门到进阶系列教程:www.spring4all.com/article/500
最后,今年的技术专题就要跟大家说再见了,五期的技术专题,讨论了我们在软件架构开发中的选型,使用,也非常感谢大家的参与和回答👋👋👋
明年,技术专题将会以全新的方式跟大家见面,我们不仅仅只是讨论技术,还讨论IT行业的点滴,希望大家一如既往的支持。