author:徐振东

createTime:2022-05-16

updateTime:2022-06-10


2022-06-10: 培训结束

# 缓存穿透与缓存雪崩

# 缓存处理流程

image-20220322131612136

​ 如图所示,在一般情况下,我们使用缓存有以下几个步骤。当一个请求过来的时候,我们先去Redis中查询数据,若数据存在,直接返回结果。不存在的话,然后再去数据库查询,接着再将结果缓存在Redis中,最后再返回结果。

# 缓存穿透

客户端请求的数据在Redis和数据库中都不存在,导致客户端的每次请求都落在了数据库上。

image-20220322131721206

# 解决方案

  • 数据库返回空后,仍向数据库写入数据,然后定时过期
  • 添加布隆过滤器

# 缓存雪崩

百度百科中对雪崩的定义是这样的:当山坡积雪 (opens new window)内部的内聚力 (opens new window)抗拒不了它所受到的重力 (opens new window)拉引时,便向下滑动,引起大量雪体崩塌,这种自然现象 (opens new window)称作雪崩。

对应到Redis中的雪崩是指,在短时间内有大量的缓存失效

373c367d31b47ab002689d9edc76dd2c

# 解决方案

  • 永不过期
  • 缓存的过期时间加上随机值
  • 采购第三方Redis