随笔 - 3  文章 - 0 评论 - 0 阅读 - 262
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

问题描述解决方案
缓存穿透 查询一个不存在的数据,不能命中缓存,导致每次请求都要到DB去查询,可能导致数据库崩溃 1.查询返回的数据为空,仍把这个空结果进行缓存,但过期时间会比较短;
2.布隆过滤器:将所有可能存在的数据哈希到一个足够大的bitmap中,一个一定不存在的数据会被这个bitmap拦截掉,从而避免了对DB的查询
缓存击穿 对于设置了过期时间的key,缓存在某个时间点过期的时候,恰好有大量对这个key的并发请求,可能导致大量并发的请求瞬间把数据库压垮 1.使用互斥锁:当缓存失效时,先使用如Redis的setnx去设置一个互斥锁,当操作成功返回时再进行数据库操作并回设缓存,否则重试get缓存的方法;
2.永远不过期:物理不过期,但逻辑过期(后台异步线程去刷新)
缓存雪崩 设置缓存时采用了相同的过期时间,缓存在某一时刻同时失效,导致大量请求访问数据库。
与缓存击穿的区别:雪崩是多key,击穿是单key缓存
1.分散缓存失效时间:在原有的失效时间基础上增加一个随机值;
2. 使用互斥锁,当缓存数据失效时,保证只有一个请求能够访问到数据库,并更新缓存,其他线程等待并重试
posted on   YLENOL  阅读(85)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
点击右上角即可分享
微信分享提示