缓存穿透问题的解决思路
缓存穿透 :缓存穿透是指客户端请求的数据在缓存中和数据库中都不存在,这样缓存永远不会生效,这些请求都会打到数据库。
-
缓存空对象
-
优点:实现简单,维护方便
-
缺点:
-
额外的内存消耗
-
可能造成短期的不一致
-
-
-
优点:内存占用较少,没有多余key
-
缺点:
-
实现复杂
-
存在误判可能
-
假设布隆过滤器判断这个数据不存在,则直接返回
这种方式优点在于节约内存空间,存在误判,误判原因在于:布隆过滤器走的是哈希思想,只要哈希思想,就可能存在哈希冲突
布隆过滤器的本质是将数据库的内容转化为bytes数组01的二进制,通过某种hash算法将数据缓存进二进制数组中,来查询先通过布隆过滤器进行判断01,如果是0,则直接返回不存在
缓存穿透产生的原因是什么?
-
用户请求的数据在缓存中和数据库中都不存在,不断发起这样的请求,给数据库带来巨大压力
缓存穿透的解决方案有哪些?
-
缓存null值 ===》 设置很短的过期时间,并且插入数据时,将数据保存进缓存
-
布隆过滤
-
增强id的复杂度,避免被猜测id规律 ===》避免攻击时影响真正的业务
-
做好数据的基础格式校验 ===》在基础校验位置就驳回
-
加强用户权限校验 ===》做好权限校验,减少非正常用户的错误访问
-
做好热点参数的限流 ===》热点数据的降级限流工作,避免数据库崩溃。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· .NET10 - 预览版1新功能体验(一)