0. 前言
学习简记:缓存穿透、缓存击穿、缓存雪崩的概念以及解决方案。
1. 处理数据请求的流程
后台先判断该数据是否在缓存中,若在缓存则返回缓存中的数据,否则去数据库中读取。
2. 缓存穿透
2.1. 情形
用户请求了缓存和数据库都不存在的数据。若不断请求该数据,会导致数据库压力过大。
2.2. 解决方案
- 接口层增加用户鉴权等权限校验。
- 使用布隆过滤器过滤掉不存在的key请求。
- 该key对应的value设置为null放置在缓存。
3、缓存击穿
3.1. 情形
大量并发请求缓存中没有但数据库中有的数据,导致数据库压力瞬间增大。
3.2. 解决方案
-
设置热点数据永不过期(也可以异步更新热点数据的过期时间)
-
加互斥锁。发生缓存缺失时,先加锁再去读数据库。等待数据缓存完毕再释放锁,这样可以保证其他相同请求不会去读数据库。
4、 缓存雪崩
4.1. 情形
大批量key过期,但查询数据量巨大,导致数据库压力过大。
值得注意的是,击穿是指大量并发同一个key,而雪崩是指大量并发不同数据。
4.2. 解决方案
-
缓存数据的到期时间随机化,避免同一时间存在大量数据过期。
-
热点数据永不过期。
参考
标签:缓存,解决方案,数据库,击穿,简记,雪崩,数据 来源: https://www.cnblogs.com/toulanboy/p/14621263.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。