如何解决空数想据的缓存穿透?

ly901206 · 2024-11-11 16:16:52 · 1719 次点击

上周服务流量出现了一波高峰,db 查询流量从平时的 2k 左右增加到 1w 左右,看监控其中 4k 的查询结果都是 record not found ,我们服务使用了 local cache ,只缓存了能查询到的数据,目前自己能想到的优化方案有

  1. localcache 改造下,空数据也存起来
  2. 使用面试宝典解决这种问题的标准答案-布隆过滤器,使用 redis 自带的 redisbloom,将线上数据刷一遍进去,localcache 没命中的话,先查询下 redisbloom ,命中在查 db 。不过布隆过滤器我基本没在真实项目中见到过。

大家有什么方案推荐吗

举报· 1719 次点击
登录 注册 站外分享
15 条回复  
ccw4wcc 初学 2024-11-11 16:23:59
蹲一个答案,第一时间也是想到布隆过滤器,不过没有实战过
Edward4074 小成 2024-11-11 16:37:35
redis 缓存,空数据也存个特殊标识,找个合适的地方统一判断这个特殊字符,返回空对象
coderxy 小成 2024-11-11 16:42:58
实际业务中很简单就是把空数据也缓存起来就完事了。
luckyrayyy 小成 2024-11-11 16:43:46
实际业务一般就是缓存空数据吧
coderzhangsan 小成 2024-11-11 16:46:39
简单的办法,就是缓存这个空标识,设置个随机的缓存时间即可;布隆过滤器稍微繁琐点。
crysislinux 小成 2024-11-11 16:47:51
缓存空数据就好了。应对攻击的话还是用 rate limit 配合日志风控比较好。引入布隆过滤器会创造更多的问题,我个人感觉这东西是不适合做业务的,主要是这种空数据的场景太多了,你不可能给每个地方都搞个布隆过滤器吧。
Kaiv2 小成 2024-11-11 16:48:51
不查 db
chachi 初学 2024-11-11 16:51:37
缓存空数据只能针对 F5 刷新 应对攻击还是要请求限制,不然都没用。
vacuitym 小成 2024-11-11 16:53:25
布隆过滤,好几个项目在用,就是要初始化数据,这个场景还挺适合的
12下一页
返回顶部