采纳答案成功!
向帮助你的同学说点啥吧!感谢那些助人为乐的人
解决缓存击穿: 插入数据的时候删除相应缓存,或者设置较短的超时时间 这句话什么意思啊老师
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 中大量的无效数据占用大量存储。
我的理解
之前在数据库查询不到Key时设置了缓存 'Key: None',给这条缓存设置一个超时时间,超时删除这条缓存,既避免短时间内再在数据库查询又可节约缓存空间。而之后数据库如果插入了数据Key,则缓存已失效,直接删除这条缓存。
不知道理解的对不对,等老师解答。
登录后可查看更多问答,登录/注册
Python工程师面试必看,资深面试官亲授,倍增面试成功率
1.9k 5
1.1k 8
1.1k 7
2.7k 4
购课补贴联系客服咨询优惠详情
慕课网APP您的移动学习伙伴
扫描二维码关注慕课网微信公众号