迹忆客 计算机编程题库

Redis 经典面试题

简述缓存穿透产生的原因,并且给出解决方案

解析:

缓存穿透是指缓存和数据库中都没有的数据,而用户不断发起请求,我们数据库的 id 都是1开始自增上去的,如发起为id值为 -1 的数据或 id 为特别大不存在的数据。这时的用户很可能是攻击者,攻击会导致数据库压力过大,严重会击垮数据库。

所以说,对于缓存穿透多数都是由恶意的攻击者或者由于代码的不规范造成的。因此,从其产生的原因来看,要防止缓存穿透是要在接口层而不是在数据层做优化。也就是说要在代码中对请求的参数进行校验。例如进行用户鉴权校验,参数做校验,不合法的参数直接在代码中返回。 举个例子,如果说请求的参数中的id的值小于等于0,则直接终止代码运行。 此种方式的一个衍生方式就是对查询结果为空的情况也进行缓存,缓存时间设置短一点,或者该key对应的数据insert了之后清理缓存。

还有一种方式是Redis自带的一个高级用法布隆过滤器(Bloom Filter)这个也能很好的防止缓存穿透的发生,它的原理也很简单就是利用高效的数据结构和算法快速判断出你这个Key是否在数据库中存在,不存在return就好了,存在就去查DB刷新Redis,然后return。

查看笔记

扫码一下
查看教程更方便