缓存击穿解决方式问题
来源:8-4 缓存机制及Redis常考面试题

码农小杨
2019-03-06
解决缓存击穿:
插入数据的时候删除相应缓存,或者设置较短的超时时间
这句话什么意思啊老师
写回答
2回答
-
PegasusWang
2019-03-08
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 中大量的无效数据占用大量存储。
10 -
Pythonist
2019-03-07
我的理解
之前在数据库查询不到Key时设置了缓存 'Key: None',给这条缓存设置一个超时时间,超时删除这条缓存,既避免短时间内再在数据库查询又可节约缓存空间。而之后数据库如果插入了数据Key,则缓存已失效,直接删除这条缓存。
不知道理解的对不对,等老师解答。
00
相似问题