上周服务流量出现了一波高峰,db 查询流量从平时的 2k 左右增加到 1w 左右,看监控其中 4k 的查询结果都是 record not found ,我们服务使用了 local cache ,只缓存了能查询到的数据,目前自己能想到的优化方案有
大家有什么方案推荐吗
1
ccw4wcc 36 天前
蹲一个答案,第一时间也是想到布隆过滤器,不过没有实战过
|
2
Edward4074 36 天前
redis 缓存,空数据也存个特殊标识,找个合适的地方统一判断这个特殊字符,返回空对象
|
3
coderxy 36 天前
实际业务中很简单就是把空数据也缓存起来就完事了。
|
4
luckyrayyy 36 天前
实际业务一般就是缓存空数据吧
|
5
coderzhangsan 36 天前
简单的办法,就是缓存这个空标识,设置个随机的缓存时间即可;布隆过滤器稍微繁琐点。
|
6
crysislinux 36 天前 via Android
缓存空数据就好了。应对攻击的话还是用 rate limit 配合日志风控比较好。引入布隆过滤器会创造更多的问题,我个人感觉这东西是不适合做业务的,主要是这种空数据的场景太多了,你不可能给每个地方都搞个布隆过滤器吧。
|
7
Kaiv2 36 天前
不查 db
|
8
chachi 36 天前
缓存空数据只能针对 F5 刷新
应对攻击还是要请求限制,不然都没用。 |
9
vacuitym 36 天前
布隆过滤,好几个项目在用,就是要初始化数据,这个场景还挺适合的
|
10
loveaeen 36 天前
存储空数据真有效吗,你的每个标识符我都只请求一次,让你缓存对应的空数据,再继续请求新的标识符,我完全不会命中你的空缓存。
|
11
Chinsung 36 天前
缓存空数据,存一个空对象或者特殊值,随机短时间几 s ,削峰就行
如果恶意请求的话(遍历值空间),就限流+监控告警( ip 维度),直接 banip ,因为限流但是不 banip 的话,正常用户也会被限流 |
12
fkdog 36 天前
难道不是优先排查缓存命中率低的原因吗?
是因为恶意遍历刷 id ,还是因为其他页面数据变动没及时更新导致访问失效链接? |
13
dode 36 天前
布隆过滤器 应该可以吧
或者把所有查询失败的结果,放入布隆过滤器? |
14
opengps 36 天前
空数想据 是啥?
|
15
happyxhw101 36 天前
布隆过滤器应该只能增加,不能修改、删除吧,另外,布隆过滤器也有一定的误判率,一定不存在,可能存在
|
18
zczy999 36 天前
如果不着急就用复杂的,正好实践一波布隆过滤器
|
19
sazima 36 天前
读到空数据, 往缓存里存一个特殊字符串, 比如__null_value__, 取数据的时候判断一下。
|
20
cobbage 36 天前
缓存不存在数据 给个特殊标识
|
21
zzmark06 34 天前
实际业务,一般是交由风控 ban 了客户 ip
至于穿透,硬干的多,水文方案没见几个落地的 |