学习简记:缓存穿透、缓存击穿、缓存雪崩的概念以及解决方案
0. 前言
学习简记:缓存穿透、缓存击穿、缓存雪崩的概念以及解决方案。
1. 处理数据请求的流程
后台先判断该数据是否在缓存中,若在缓存则返回缓存中的数据,否则去数据库中读取。
2. 缓存穿透
2.1. 情形
用户请求了缓存和数据库都不存在的数据。若不断请求该数据,会导致数据库压力过大。
2.2. 解决方案
- 接口层增加用户鉴权等权限校验。
- 使用布隆过滤器过滤掉不存在的key请求。
- 该key对应的value设置为null放置在缓存。
3、缓存击穿
3.1. 情形
大量并发请求缓存中没有但数据库中有的数据,导致数据库压力瞬间增大。
3.2. 解决方案
-
设置热点数据永不过期(也可以异步更新热点数据的过期时间)
-
加互斥锁。发生缓存缺失时,先加锁再去读数据库。等待数据缓存完毕再释放锁,这样可以保证其他相同请求不会去读数据库。
4、 缓存雪崩
4.1. 情形
大批量key过期,但查询数据量巨大,导致数据库压力过大。
值得注意的是,击穿是指大量并发同一个key,而雪崩是指大量并发不同数据。
4.2. 解决方案
-
缓存数据的到期时间随机化,避免同一时间存在大量数据过期。
-
热点数据永不过期。
参考
❤ 如果这篇文章对你有帮助,麻烦来个大拇指👍,谢谢。