文章目录
前言:基本多级缓存架构
一、缓存穿透
1.1 缓存穿透介绍
缓存穿透指的是查询一个系统中根本不存在的数据,因为数据不存在则不会写入缓存,所以在查询的时候会越过缓存,查询请求直接抵达数据库。这样会导致有人恶意制造大量不存在的数据,请求我们系统,导致数据库压力过大崩溃。
1.2 缓存穿透图例
如下图所示 因为我们设计的多级缓存,是不缓存不存在的数据的,导致查询大量不存在的数据时,请求全部涌入数据库,导致数据库挂调。
1.3 解决方案
1.3.1 使用 Redis 解决(解决方案图例,·多级缓存架构·)
Redis 缓存不存在的数据
1.3.2 布隆过滤器
博主还未仔细研究这个如果和使用 后续研究会更新
二、 缓存击穿
1.1 缓存击穿介绍
缓存击穿两种场景:1. 场景1 因为我们使用Redis 时一般都会设置缓存超时时间,当某个缓存刚好过期,这个时候针对于某个Key ,前端突然涌入大量的请求时,不会命中缓存,因此请求瞬间涌入数据库,导致数据库崩溃。
2. 场景2 一般Redis 不会缓存数据库的全量数据,主要缓存一些热点数据(查询次数多的),比如央视突然放了一个广告,某个商品瞬间爆火,在这个之前这个商品是无人问津的,因此缓存中压根不存在该商品数据。因为爆火的原因,在这个一时刻,很多人同时去搜索这个商品,由于缓存灭有该数据,不会命中缓存,因此请求瞬间涌入数据库,导致数据库崩溃
1.2 缓存击穿图例
图就不画了,可以对比上方缓存穿透,本质就是数据大,并且没有命中缓存导致的数据库压力多大崩溃。
1.3 缓存击穿解决方案
使用互斥锁去处理或则分布式锁。
三、缓存雪崩(热点数据集中失效)
1.1 缓存雪崩介绍
缓存雪崩是指在我们设置缓存时,大量的缓存数据采用了相同的过期时间,导致缓存在某一时刻同时失效,前端请求这些数据时,不会命中缓存,因此请求瞬间涌入数据库,导致数据库崩溃。
1.2 缓存雪崩图例
图就不画了,可以对比上方缓存穿透,本质就是数据大,并且没有命中缓存导致的数据库压力多大崩溃。
1.2 缓存雪崩解决方案
设置缓存时,在过期时间上加个随机过期时间例如1-5分钟,这样可以保证缓存不会在同一时刻大量失效,导致数据库压力过大。