学习简记:缓存穿透、缓存击穿、缓存雪崩的概念以及解决方案

0. 前言

学习简记:缓存穿透、缓存击穿、缓存雪崩的概念以及解决方案。

1. 处理数据请求的流程

后台先判断该数据是否在缓存中,若在缓存则返回缓存中的数据,否则去数据库中读取。

2. 缓存穿透

2.1. 情形

用户请求了缓存和数据库都不存在的数据。若不断请求该数据,会导致数据库压力过大。

2.2. 解决方案

  • 接口层增加用户鉴权等权限校验。
  • 使用布隆过滤器过滤掉不存在的key请求。
  • 该key对应的value设置为null放置在缓存。

3、缓存击穿

3.1. 情形

大量并发请求缓存中没有但数据库中有的数据,导致数据库压力瞬间增大。

3.2. 解决方案

  • 设置热点数据永不过期(也可以异步更新热点数据的过期时间)

  • 加互斥锁。发生缓存缺失时,先加锁再去读数据库。等待数据缓存完毕再释放锁,这样可以保证其他相同请求不会去读数据库。

4、 缓存雪崩

4.1. 情形

大批量key过期,但查询数据量巨大,导致数据库压力过大。

值得注意的是,击穿是指大量并发同一个key,而雪崩是指大量并发不同数据。

4.2. 解决方案

  • 缓存数据的到期时间随机化,避免同一时间存在大量数据过期。

  • 热点数据永不过期。

参考

posted @ 2021-04-06 12:14  偷懒人  阅读(150)  评论(0编辑  收藏  举报