首页 > 其他分享 >攻破工程级复杂缓存难题--企业实战

攻破工程级复杂缓存难题--企业实战

时间:2024-08-03 14:52:39浏览次数:14  
标签:实战 缓存 key -- 问题 探析 本地 策略

缓存技术在现代分布式系统中至关重要,不仅提升了系统性能,还减轻了后端数据库的压力。然而,缓存系统也面临着诸多挑战,如缓存穿透、缓存雪崩、缓存击穿和热点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

标签:实战,缓存,key,--,问题,探析,本地,策略
From: https://blog.csdn.net/2401_86608273/article/details/140890666

相关文章

  • caffe编译和基本使用(Windows + CPU)
    xqspace0.摘要本文主要完成以下几点:caffe默认支持是vs2013/vs2015+python2.7/python3.5,使用其他版本会比较麻烦,这里使用的是vs2015和python3.5;完成caffe在windows上的编译(cpu版);提供caffe的python接口;caffe的基本使用方法(这里是推荐几篇讲的比较详细的入门博文);......
  • 某团_token逆向
    ​声明:本文章中所有内容仅供学习交流使用,不用于其他任何目的,抓包内容、敏感网址、数据接口等均已做脱敏处理,严禁用于商业用途和非法用途,否则由此产生的一切后果均与作者无关!wxa15018601872       本文章未经许可禁止转载,禁止任何修改后二次传播,擅自使用本文讲......
  • 某鱼wasm逆向
    ​声明:本文章中所有内容仅供学习交流使用,不用于其他任何目的,不提供完整代码,抓包内容、敏感网址、数据接口等均已做脱敏处理,严禁用于商业用途和非法用途,否则由此产生的一切后果均与作者无关!wxa15018601872       本文章未经许可禁止转载,禁止任何修改后二次传播,......
  • 优酷ckey140逆向
    ​声明:本文章中所有内容仅供学习交流使用,不用于其他任何目的,抓包内容、敏感网址、数据接口等均已做脱敏处理,严禁用于商业用途和非法用途,否则由此产生的一切后果均与作者无关!wxa15018601872       本文章未经许可禁止转载,禁止任何修改后二次传播,擅自使用本文讲......
  • 列表的增删改查遍历
    两种遍历方法:for和foreach遍历点击查看代码usingSystem;usingSystem.Collections.Generic;usingSystem.Linq;usingSystem.Text;usingSystem.Threading.Tasks;usingSystem.Windows.Documents;namespacetest_12_列表{internalclassProgram{......
  • 易盾滑块分析
    ​第一次写博客选择了易盾来分析写的不好勿喷java转python没有学多久可能存在很多错误希望能给你们提供一点思路。声明 本文章中所有内容仅供学习交流使用,不用于其他任何目的,不提供完整代码,抓包内容、敏感网址、数据接口等均已做脱敏处理,严禁用于商业用途和非法用途,否则由此产......
  • 飞猪ua逆向
    ​声明:本文章中所有内容仅供学习交流使用,不用于其他任何目的,抓包内容、敏感网址、数据接口等均已做脱敏处理,严禁用于商业用途和非法用途,否则由此产生的一切后果均与作者无关!wxa15018601872       本文章未经许可禁止转载,禁止任何修改后二次传播,擅自使用本文讲......
  • LeetCode | 单链表操作
    LeetCode203移除链表元素LeetCode707设计链表LeetCode206反转链表主类ListNodepackagecom.github.dolphinmind.linkedlist.uitls;/***@authordolphinmind*@ClassNameListNode*@description*@date2024/8/3*///链表组成元素:节点publicclass......
  • 使用 Alba 对 AspnetCore项目进行测试
    前言在AspnetCore生态系统中,我们测试项目一般使用Microsoft.AspNetCore.TestHost的TestServer到.NET6后提供的Microsoft.AspNetCore.Mvc.Testing的WebApplicationFactory,后者是前者的封装,专门用于测试ASP.NETCore应用程序。它简化了创建和配置测试服务器的过程。而Alba也......
  • 得物web端逆向 补环境(第二部分补充已出)
    ​声明:本文章中所有内容仅供学习交流使用,不用于其他任何目的,不提供完整代码,抓包内容、敏感网址、数据接口等均已做脱敏处理,严禁用于商业用途和非法用途,否则由此产生的一切后果均与作者无关!wxa15018601872       本文章未经许可禁止转载,禁止任何修改后二次传播,......