分布式缓存最全详解(图文全面总结)

简介: 关注【mikechen的互联网架构】,10年+ BAT架构经验倾囊相授。本文详细介绍分布式缓存的核心概念、特点及常见问题,如缓存雪崩、缓存穿透和缓存击穿,并探讨其应用场景和解决方案。欢迎交流。

关注△mikechen的互联网架构△,10年+BAT架构经验倾囊相授

image.png

大家好,我是 mikechen | 陈睿

分布式缓存在分布式架构里面占据了非常核心地位,可以说是分布式的基石,所以需要掌握好分布式缓存,下面我就全面来详解分布式缓存。

分布式缓存

分布式缓存:就是将缓存数据分布在多个节点上,以提高系统的性能、可伸缩性、可用性。

image.png

分布式缓存通常采用键值对存储,可以存储各种类型的数据,比如:对象、数据库查询结果、计算结果等等。

分布式缓存里面,我们常用的分布式缓存包括:Redis和Memcached,Redis还会更多。

分布式缓存特点

分布式缓存具有如下4大特性:

image.png

1.高性能

这是分布式缓存最大的使用场景,就是提升性能。

比如:通过缓存热点数据,降低数据库、以及其他后端存储的访问频率,提高系统响应速度。

2.动态扩展性

可以轻松添加或移除缓存节点,以应对不断增长的负载。

3.高可用性

高可用性会增强,原因很简单,因为分布式缓存都是多个节点,而且,分布式缓存通常具有数据备份、故障转移机制等功能。

所以,可用更好的确保在节点故障时,仍能提供服务。

4.透明性

用户无需关心缓存的具体实现,可以像使用本地缓存一样,使用分布式缓存。

分布式缓存核心问题

分布式缓存面临比较大的问题,经常会涉及:缓存雪崩、缓存击穿等问题。

1.缓存雪崩

缓存雪崩,就是:大量缓存同时失效,导致大量请求直接访问后端存储,压力骤增,导致系统崩溃。

如下图所示:

image.png

缓存雪崩通常发生在缓存中的大量数据在同一时间失效,例如:缓存的过期时间相同,或由于某种原因导致大规模数据同时失效。

一般会经历,如下步骤:

1.缓存失效

缓存中的大量数据同时失效,可能是由于过期时间相同、缓存清理操作或其他原因。

这导致之前缓存的数据不再可用,需要从后端存储重新加载。

2.请求压力增大
由于热点数据需要重新加载,大量的请求同时涌入系统,这些请求直接访问后端存储系统,而不经过缓存。

由于瞬时请求量的激增,后端存储系统可能难以应对,导致性能下降。

3.存储系统压力骤增

大量的请求直接访问后端存储系统,压力骤增,可能导致存储系统的性能下降,甚至宕机。

这就是缓存雪崩的最终步骤,系统可能无法正常提供服务。

2.缓存穿透

缓存穿透是指查询一个不存在的数据,由于缓存没有命中,导致请求直接访问底层存储系统。

如下图所示:

image.png

缓存穿透通常由于一些恶意请求或异常查询引起,而这些查询无法在缓存中找到对应的数据。

可用采用,如下措施:

1.缓存空值

在缓存中设置空值,比如:null、或你自己指定的特定标记。

表示查询的键对应的数据不存在,防止相同的查询一直穿透到存储系统。

这种方式,就是会特比浪费内存空间,因为内存还是非常高贵的资源。

2.布隆过滤器

使用布隆过滤器等数据结构,快速判断查询的键是否存在于缓存中,减少对存储系统的访问。

布隆过滤器(Bloom Filter)是一种数据结构,用于判断一个元素是否属于一个集合,它具有高效的插入和查询操作。

这个是,目前使用比较多的方案,成本低,效果好。

3.缓存击穿

缓存击穿问题会导致系统性能下降,响应时间增加,可能引起雪崩效应,进而影响整个系统的可用性。

缓存击穿,通常发生在某个热点数据的缓存失效的瞬间,此时大量请求同时涌入系统。

如下图所示:

image.png

此时,无法在缓存中获取数据,直接导致存储系统的压力骤增,数据库压力过大,也会出现同样的问题。

所以,设置合理的缓存过期时间时间,就变得非常的重要了。

4.缓存预热

缓存预热是在系统启动或低峰期时,提前将热点数据加载到缓存中。

比如,大家熟知的阿里双11秒杀,这些热点数据,都会提前放入到缓存。

一般,在系统启动或低峰期,通过手动或自动的方式,将热点数据加载到缓存中。

对于大量数据的情况,可以考虑使用异步加载机制等。

总之,通过提前加载热点数据到缓存中,系统可以更快地响应用户请求,提高系统的稳定性和性能。

分布式缓存应用

分布式缓存广泛用于高并发读取场景,如Web应用、电子商务平台等。

通过缓存热点数据,可以大大提高系统的读取性能,减轻对底层存储系统的负担。

分布式缓存常,还被用于存储用户会话数据,避免在每次请求中都需要查询数据库,也就是分布式Session。

除此之外,在分布式计算场景中,分布式缓存还可以用于存储中间计算结果,提高计算效率。

以上,是分布式缓存详细解析,欢迎评论区留言交流或拓展。

我是 mikechen | 陈睿 ,关注【mikechen的互联网架构】,10年+BAT架构技术倾囊相授。

本文已同步我的技术博客 www.mikechen.cc,更新至我原创的《30W+字大厂架构技术合集》中。

相关文章
|
缓存 NoSQL Java
【JetCache】JetCache的使用方法与步骤
【JetCache】JetCache的使用方法与步骤
7497 1
|
存储 缓存 JSON
实战干货 | 分布式多级缓存设计方案
分布式多级缓存设计方案,解决海量数据读取的性能问题,包含多级缓存的存储设计,流程设计;利用多数据副本保证数据的可用性,同时通过不同数据源特点提供更高性能、更多场景数据差异化的支持
1909 0
实战干货 | 分布式多级缓存设计方案
|
10月前
|
存储 缓存 NoSQL
分布式系统架构8:分布式缓存
本文介绍了分布式缓存的理论知识及Redis集群的应用,探讨了AP与CP的区别,Redis作为AP系统具备高性能和高可用性但不保证强一致性。文章还讲解了透明多级缓存(TMC)的概念及其优缺点,并详细分析了memcached和Redis的分布式实现方案。此外,针对缓存穿透、击穿、雪崩和污染等常见问题提供了应对策略,强调了Cache Aside模式在解决数据一致性方面的作用。最后指出,面试中关于缓存的问题多围绕Redis展开,建议深入学习相关知识点。
709 8
|
11月前
|
存储 缓存 负载均衡
从零到一:分布式缓存技术初探
分布式缓存通过将数据存储在多个节点上,利用负载均衡算法提高访问速度、降低数据库负载并增强系统可用性。常见产品有Redis、Memcached等。其优势包括性能扩展、高可用性、负载均衡和容错性,适用于页面缓存、应用对象缓存、状态缓存、并行处理、事件处理及极限事务处理等多种场景。
670 1
|
9月前
|
运维 数据可视化 开发者
Dpanel:Star2k,短短时间就被大家称为GitHub开源神器!轻量化Docker面板,还在等什么
如今的软件开发和运维领域,Docker容器技术已经成为一种主流的解决方案,它允许开发者和系统管理员以更高效、更灵活的方式部署和管理应用程序。然而,Docker的命令行界面虽然强大,但对于某些用户来说可能不够直观。今天,我们要介绍的开源项目——dpanel,就是一个轻量化的Docker可视化管理面板,它以其简洁、高效的特点,为用户提供了一个易于操作的界面来管理Docker容器和镜像。
659 0
|
消息中间件 中间件 Kafka
分布式事务最全详解 ,看这篇就够了!
本文详解分布式事务的一致性及实战解决方案,包括CAP理论、BASE理论及2PC、TCC、消息队列等常见方案,助你深入理解分布式系统的核心技术。关注【mikechen的互联网架构】,10年+BAT架构经验倾囊相授。
分布式事务最全详解 ,看这篇就够了!
|
11月前
|
Cloud Native 持续交付 云计算
云原生技术的崛起与未来展望
本文探讨了云原生技术的核心概念、发展历程及其在现代IT架构中的关键作用。随着云计算的普及,云原生作为一种优化云应用构建和部署的方法,正逐渐成为企业数字化转型的重要推力。文章分析了容器化、微服务、持续集成/持续部署(CI/CD)等关键技术如何支撑起灵活、高效、可扩展的云原生架构,并讨论了面临的挑战与未来的发展趋势。
394 12
|
存储 缓存 NoSQL
深入理解分布式缓存——使用Spring Boot+Redis实现分布式缓存解决方案
在微服务飞速发展的今天,在高并发的分布式的系统中,缓存是提升系统性能的重要手段。没有缓存对后端请求的拦截,大量的请求将直接落到系统的底层数据库。系统是很难撑住高并发的冲击,下面就以Redis为例来聊聊分布式系统中关于缓存的设计以及过程中遇到的一些问题。
10949 58
深入理解分布式缓存——使用Spring Boot+Redis实现分布式缓存解决方案
|
XML 缓存 Java
搞透 IOC、Spring IOC ,看这篇就够了!
本文详细解析了Spring框架的核心内容——IOC(控制反转)及其依赖注入(DI)的实现原理,帮助读者理解如何通过IOC实现组件解耦,提高程序的灵活性和可维护性。关注【mikechen的互联网架构】,10年+BAT架构经验倾囊相授。
|
NoSQL Java API
分布式锁的实现原理与应用场景,5 分钟彻底搞懂!
本文详细解析了分布式锁的实现原理与应用场景,包括线程锁、进程锁和分布式锁的区别,以及分布式锁的四种要求和三种实现方式(数据库乐观锁、ZooKeeper、Redis)。关注【mikechen的互联网架构】,10年+BAT架构经验倾囊相授。
分布式锁的实现原理与应用场景,5 分钟彻底搞懂!