缓存技术在现代分布式系统中至关重要,不仅提升了系统性能,还减轻了后端数据库的压力。然而,缓存系统也面临着诸多挑战,如缓存穿透、缓存雪崩、缓存击穿和热点key问题。通过多种策略的综合应用,包括本地缓存、双缓存方案、多级缓存、多副本、热点key拆分和动态分散等,可以有效应对这些问题。
本地缓存适用于频繁访问且少变更的数据,如API信息和业务基础信息,而双缓存方案则通过Tair和Squirrel的组合,实现主备缓存切换和高可用性。在缓存更新上,采用旁路缓存模式、读写穿透模式和异步写缓存模式等方法,确保数据一致性和系统稳定性。策略层设计中,降级策略、兜底策略和报警策略进一步保障了缓存系统的可靠性。
综合来看,通过合理设计和灵活应用缓存技术,可以显著提升分布式系统的性能和稳定性,为业务的高效运行提供强有力的支持。
————————————————
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/xiaofeng10330111/article/details/140759153
目录
一、走进业务中的缓存
(一)本地缓存
(二)分布式缓存
二、缓存更新模式分析
(一)Cache Aside Pattern(旁路缓存模式)
读操作流程
写操作流程
流程问题思考
问题1:为什么不是先删缓存,再更新数据库?
问题2:为什么更新操作是将cache失效,而不是更新?
Cache Aside Pattern模式不一致问题的发生
(二)Read/Write Through Pattern(读写穿透模式)
Read Through
Write Through
(三)Write Behind Caching Pattern(异步写缓存模式)
(四)几种模式对比
三、缓存一致性分析
(一)一致性问题根因
业务层面引起的一致性问题
系统层面引起的一致性问题
(二)强一致性解决方案
采用强一致性协议
并行请求转为串行化
综合考虑
(三)最终一致性解决方案
重试机制
重试+binlog
综合考虑
四、缓存热门问题分析和解决
(一)缓存穿透
问题描述
解决策略分析
(二)缓存雪崩
问题描述
解决策略分析
(三)缓存击穿
问题描述
解决策略分析
(四)热点key问题
问题描述
(五)大key问题
问题描述
大key的认定
解决策略分析
五、复杂工程应对:本地缓存+双缓存方案
(一)本地缓存+双缓存方案架构
本地缓存
双缓存方案
优势与实施细节
(二)策略层设计
降级策略
兜底策略
报警策略
(三)缓存查询流程
1. 主备缓存切换
2. 缓存异常处理
3. 异常情况处理
(四)缓存更新策略流程
1. 数据总线重试机制
2. 双缓存更新策略
3. 自动校对任务
六、总结
干货分享,感谢您的阅读!在日常生活中,大家都会在家里储备一些粮食,比如米面油。但是,你不会在初期就囤积大量的食物,比如说一口气买半年甚至一年的粮食。
如果你住的地方附近有便利的超市,随时可以买到新鲜的食物,且你目前的家庭成员不多,消耗量不大,那么大规模囤粮不仅占用储物空间,还可能造成浪费(因为食品有保质期)。
只有在你预计家里即将迎来很多客人,或者附近的超市要关门维修几个月时,大规模囤粮才是明智之举。
说这个例子主要还是想提缓存的必要性:虽然缓存技术可以大幅提升系统性能,但在没有明确需要时,应该慎重考虑是否使用缓存。如果在系统初期或者短期内,直接使用数据库就能满足业务需求,那么最好先不要引入缓存。缓存的引入应该是在系统确实需要提升性能,或者有其他明确原因的时候。
历史基础问题回顾:
具体内容基础 对应详细知识和解法链接
探析缓存穿透问题
高并发场景下的缓存穿透问题探析与应对策略
探析缓存雪崩
高并发场景下的缓存雪崩探析与应对策略-CSDN博客
探析缓存击穿 高并发场景下的缓存击穿问题探析与应对策略-CSDN博客
热key识别与实战解决
优化分布式系统性能:热key识别与实战解决方案_热key识别框架-CSDN博客
探析缓存热点key 高并发场景下的热点key问题探析与应对策略_热点账户高并发解决方案-CSDN博客
探析大 Key 问题
高并发场景下的大 Key 问题及应对策略-CSDN博客
一、走进业务中的缓存
在现代高并发系统中,缓存作为一种关键技术,被广泛应用于各种场景中以提升性能和系统稳定性。缓存的存在,使得系统能够在面对大量请求时,依然保持高效的响应速度和较高的吞吐量。因此,缓存被誉为高并发系统的三大保护利器之一(缓存、限流、降级),能够显著提升系统访问速度和并发用户数。
在一次用户请求的路径中,数据通常会经过多个缓存节点。这些节点包括浏览器缓存、CDN节点缓存、网关代理缓存,以及在各业务系统内常用的本地缓存和分布式缓存等。每个缓存节点都承担着特定的作用,以减少数据源的访问压力,提高数据的访问速度。我们聚焦在服务端开发时,其主要包括本地缓存和分布式缓存两部分。
(一)本地缓存
对于单机应用或数据量较小的场景,使用本地缓存是一个高效且简单的解决方案。利用 HashMap 或 Guava Cache 等工具,可以轻松实现一个简单而快速的本地缓存。本地缓存的主要优点是速度快,因为它直接在应用进程内存中存储数据,避免了网络开销。
然而,本地缓存也有其局限性。由于数据存储在本地内存中,当应用部署在多台服务器上时,本地缓存的数据一致性和同步问题将会变得复杂。此外,本地缓存受限于单台服务器的内存容量,无法处理大规模数据。
(二)分布式缓存
对于需要处理大量数据和高并发请求的分布式系统,分布式缓存是必不可少的。常用的分布式缓存解决方案包括 Redis、Tair 等。分布式缓存通过将数据存储在独立的缓存服务器上,并提供高效的访问接口,极大地提升了数据的访问速度和系统的伸缩性。
————————————————
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/xiaofeng10330111/article/details/140759153