文章目录

  • 1.缓存穿透
  • 2.缓存雪崩
  • 3.缓存预热
  • 4.缓存降级


1.缓存穿透

由于不恰当的业务功能实现,或者外部恶意攻击不算请求不存在的数据,由于缓存中没有保存该数据,就会直接访问数据库,对数据库带来压力甚至崩溃。
解决:
将不存在的数据访问结果,也存到缓存中,避免缓存访问的穿透。

2.缓存雪崩

当缓存重启或大量缓存数据同时失效,这样大批请求就会直接访问数据库,对 DB 造成压力, 从而引起 DB 故障,系统崩溃。

解决:
(1)将数据按照热度分类,热度较高的缓存周期长一些,热度较低的缓存周期短一些。
(2)设置数据的过期时间时,添加一个随机因子,比如5分钟10分钟。
(3)预估DB能力,如果缓存挂掉,数据库仍可以在一定程度上抗住流量的压力。

3.缓存预热

缓存预热就是系统上线后,将相关的缓存数据直接加载到缓存系统。这样就可以避免在用户请求的
时候,先查询数据库,然后再将数据缓存的问题。用户直接查询事先被预热的缓存数据
如果不进行预热, 那么 Redis 初识状态数据为空,系统上线初期,对于高并发的流量,都会访
问到数据库中, 对数据库造成流量的压力。
解决方案:

  1. 数据量不大的时候,工程启动的时候进行加载缓存动作;
  2. 数据量大的时候,设置一个定时任务脚本,进行缓存的刷新;
  3. 数据量太大的时候,优先保证热点数据进行提前加载到缓存。

4.缓存降级

降级的情况,就是缓存失效或者缓存服务挂掉的情况下,我们也不去访问数据库。我们直接访问内存部分数据缓存或者直接返回默认数据