14.7

来源:14-7 详解缓存穿透与解决方案

精慕门2276547

2024-03-20

老师 我看说缓存穿透是大量访问一个redis中不存在的key而造成的大量访问数据库,但是我们的service方法不是规定了@cacheable,然后指定了key的吗,如果通过正常http请求来访问接口  然后访问缓存,不会出现访问不存在的key的情况吧, 或者说可以通过某种恶意方式去大量访问不存在的key,那我们将不存在的key和null值存进redis是不是也没意义了,恶意的话也不会去重复访问一个不存在的key吧

写回答

1回答

甲蛙

2024-08-01

点赞!确实有这种情况,这时候我们会用到另一个知识:布隆过滤器,可以百度下,原理大概就是把数据库所有的key用hash算法放到redis,bitmap,当外部请求时,先看看bitmap有。它的效果是:bitmap有,数据库不一定有;bitmap没有,数据库肯定没有。所以当恶意请求过来时,bitmap没有,那数据库肯定也没有

0
2
甲蛙
回复
精慕门2276547
1 将key拼起来做md5,就这几个参数拼出来的参数来说,不会出现重复。md5确实可能出现重复,但是值太少的话不需要考虑。如果确实担心重复,可以再拼接回某些业务数据,比如md5拼上日期,或md5拼上车次。2 余票查询traincode可以为空,这个不能说他是无效请求,这个场景就不适合用布隆过滤器了,这个应该用限流来减轻接口压力,后面有介绍限流。
2024-09-23
共2条回复

新版Springboot3.0打造能落地的高并发仿12306售票系统

最新版Spring3.0仿12306售票系统实战

852 学习 · 511 问题

查看课程