缓存击穿解决方式问题

来源: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 中大量的无效数据占用大量存储。

1
0

Pythonist

2019-03-07

我的理解

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

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

0
0

Python工程师面试宝典 一线大厂资深面试官亲授

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

1035 学习 · 102 问题

查看课程