分布式缓存详解(定义特点及技术应用)

分布式缓存详解(定义特点及技术应用)-mikechen

什么是分布式缓存

分布式缓存是指将缓存数据,分布在多个节点上的缓存系统,这就是分布式缓存。

 

分布式缓存特点

相对于本地应用缓存,分布式缓存具有如下4大特性:

1.高性能

分布式缓存将高速内存作为数据对象的存储介质,分布式缓存通常采用键值对存储,可以快速地读取和写入缓存数据。

2.动态扩展性

分布式缓存可以提高应用程序的性能和可伸缩性,因为缓存数据可以从多个节点中获取,从而减少了单个节点的负载。

3.高可用性

因采用多节点存储,数据可用性较高,确保不会因服务器故障而导致缓存服务中断或数据丢失。

4.易用性

多数缓存系统提供了图形化的管理控制台,便于统一维护。

 

分布式缓存核心问题

分布式缓存面临比较大的问题,如下:

1.缓存雪崩

数据未加载到缓存中,或者缓存同一时间大面积的失效,从而导致所有请求都去查数据库,导致数据库CPU和内存负载过高,严重的时候会导致数据库宕机,无法提供数据服务,最终导致系统崩溃。

如下图所示:

比如一个雪崩的简单过程:

分布式缓存详解(定义特点及技术应用)-mikechen
雪崩会经历如下步骤:

1)缓存失效,但依然大量请求访问缓存服务redis;

2)redis大量失效后,大量请求转向到mysql数据库;

3)mysql的调用量暴增,很快就扛不住了,甚至直接宕机;

由于大量的应用服务依赖mysql和redis的服务,这个时候很快会演变成各服务器集群的雪崩,最后网站彻底崩溃。

 

2.缓存穿透

查询一个必然不存在的数据,查询一个必然不存在的key,每次都会访问DB,如果有人恶意破坏,那么很可能直接对DB造成影响。

例如:从缓存redis没有命中,需要从mysql数据库查询,查不到数据则不写入缓存,这将导致这个不存在的数据每次请求都要到数据库去查询,造成缓存穿透。

为了防止缓存穿透攻击,可以采取以下措施:

  1. Bloom filter:使用Bloom filter算法来过滤掉不合法的请求。Bloom filter是一种快速、高效的数据结构,可以判断一个元素是否存在于一个集合中。
  2. 缓存空对象:当缓存中没有查询的key对应的值时,可以将一个空对象放入缓存中,这样下次查询同样的key时就会返回空对象,而不会再次访问数据库。
  3. 限制请求频率:限制同一IP的请求频率,防止攻击者发送大量的恶意请求。
  4. 使用云防护服务:使用云防护服务来防止恶意攻击者对系统进行攻击。这些服务通常使用机器学习和人工智能算法来检测和阻止攻击。

 

3.缓存预热

缓存预热就是系统上线后,将相关的缓存数据直接加载到缓存系统。

这样就可以避免在用户请求的时候,先查询数据库,然后再将数据缓存的问题,用户直接查询事先被预热的缓存数据。

解决思路:

1)直接写个缓存刷新页面,上线时手工操作下。

2)数据量不大,可以在项目启动的时候自动进行加载。

目的就是在系统上线前,将数据加载到缓存中。

 

4.缓存淘汰策略

在缓存数据过多的时候,需要使用某种淘汰算法来决定淘汰哪些数据,常用的淘汰算法如下:

FIFO(First In First Out):先进先出算法,判断存储时间,离当前时间越久的数据越有限被淘汰。

LRU(Least Recently Used):最近最少使用算法,判断缓存最近被使用的时间,距离当前时间越远的数据优先被淘汰。

LFU(Least Frequently Used):最不经常使用算法,在一段时间内被使用次数最少的数据缓存优先被淘汰。

 

分布式缓存技术

常用的分布式缓存包括Redis和Memcached。

1.Memcached

分布式缓存详解(定义特点及技术应用)-mikechen

Memcached是一个开源的,高性能的内存绶存软件,从名称上看Mem就是内存的意思,而Cache就是缓存的意思。

Memcached是一个高性能的分布式内存对象缓存系统,用于动态Web应用以减轻数据库负载。

Memcached通过在内存中缓存数据和对象来减少读取数据库的次数,从而提高动态、数据库驱动网站的速度。

 

2.Redis

Redis是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。

特点:

Redis支持多种类型的数据结构,最常用的5大数据类型,如下图所示:

分布式缓存详解(定义特点及技术应用)-mikechen

 

Redis的持久化机制有3种:

1.RDB(Redis Data Base) 内存快照

RDB 快照是一次全量备份,RDB快照是内存数据的二进制序列化形式,在存储上非常紧凑。

2.AOF(Append Only File) 增量日志

AOF 则是将每次执行的写命令保存到硬盘,类似于 MySQL 的 Binlog,AOF 持久化的实时性更好,即当进程意外退出时丢失的数据更少。

3.RDB AOF混合持久化

Redis4.0 后大部分的使用场景都不会单独使用 RDB 或者 AOF 来做持久化机制,而是兼顾二者的优势混合使用。

 

分布式缓存应用

分布式缓存的应用场景如下:

用作缓存,由于内存的操作,可以减少数据库频繁访问读取的压力。

分布式锁,分布式锁的方案很多,基于Redis实现的分布式锁一般用得最多。

用于计数器 ,基于incr原理每次访问不断累加,可以统计网站访问量,阅读量,点击量等。

用于分布式限流 ,基于incr和expire原理 通过累计单位时间请求次数达到限流。

除此之外可以用于排行、购物车等。

以上就是分布式缓存详解,更多分布式系统方案,请查看:史上最强分布式系统详解(非常全面)

作者简介

陈睿|mikechen,10年+大厂架构经验,BAT资深面试官,就职于阿里巴巴、淘宝、百度等一线互联网大厂。

👇阅读更多mikechen架构文章👇

阿里架构 |双11秒杀 |分布式架构 |负载均衡 |单点登录 |微服务 |云原生 |高并发 |架构师

以上

关注作者「mikechen」公众号,获取更多技术干货!

后台回复架构,即可获取《阿里架构师进阶专题全部合集》,后台回复面试即可获取《史上最全阿里Java面试题总结

评论交流
    说说你的看法