请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

缓存击穿解决方式问题

解决缓存击穿:
插入数据的时候删除相应缓存,或者设置较短的超时时间
这句话什么意思啊老师

正在回答 回答被采纳积分+3

2回答

PegasusWang 2019-03-08 23:26:20

hi,你指的应该是缓存穿透,不是击穿。

流程: 查询 obj_id  ->  Redis(查不到obj_id)  ->  数据库(Mysql 再查,查不到返回 None)

如果大量查不到的数据库落到数据库会给数据库较大的压力。这个时候可以给这些查不到的obj_id 也在 Redis中设置为 None,这样一来就直接可以在 redis 层直接返回了,不用查数据库了。

但是这个弊端就是 Redis 中可能设置大量的这种不存在Mysql中的obj_id。我举个例子就是爬虫系统,有些爬虫系统比较笨,就是枚举你的 url 中的递增 id,但是你的 id 是发号器发的,这个时候爬虫就会触发大量的无效请求,导致你的 Redis 中存储了很多这种不存在的 obj_id: None 。

解决方式就是:如果有了对应的数据插入的时候及时删除缓存,或者把 key 的超时时间设置短一点,防止 redis 中大量的无效数据占用大量存储。

1 回复 有任何疑惑可以回复我~
Pythonist 2019-03-07 07:24:36

我的理解

之前在数据库查询不到Key时设置了缓存 'Key: None',给这条缓存设置一个超时时间,超时删除这条缓存,既避免短时间内再在数据库查询又可节约缓存空间。而之后数据库如果插入了数据Key,则缓存已失效,直接删除这条缓存。

不知道理解的对不对,等老师解答。

0 回复 有任何疑惑可以回复我~
问题已解决,确定采纳
还有疑问,暂不采纳
Python工程师面试宝典 一线大厂资深面试官亲授
  • 参与学习       1040    人
  • 解答问题       102    个

Python工程师面试必看,资深面试官亲授,倍增面试成功率

了解课程
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号