面试-Redis-缓存穿透

:什么是缓存穿透 ? 怎么解决 ?

:缓存穿透就是指查询一个不存在的数据,那么该请求必然会打到数据库。数据库查询不数据因此不会写入缓存,所以会导致每次请求都进入数据库,从而给数据库带来较大的压力导致数据库挂掉。

解决方案的话,我们通常都会用(缓存空对象/布隆过滤器)来解决它

:好的,你能介绍一下吗?

答,可以的,...

缓存空对象

缓存空对象就是指当查询一个不存在的数据时,Redis任然缓存一个空数据,当下次同样的请求过来时就直接进入Redis,从而减少数据库的压力。

布隆过滤器

布隆过滤器主要是用于检索一个元素是否在在集合中

我们当时主要是用redisson实现的布隆过滤器。

他的底层主要是初始化一个较大的数组,里面存放的是二进制0或1,初始值都为0,当一个key进来时会对其进行三次hash计算获取其值,并将其对应的数组下标的值改为1,这样的话,三个位置标明一个key的存在

查询的过程也是同样如此,只有都为1时才表示存在。

当然这样也是有缺点的,布隆过滤器有可能会产生误判。不过我们也可以设置误判率,大概率不超过5%。其实这个误判率是必然存在的,要不就得增加数组的长度。5%以内的误判率一般的项目也能接受,不至于高并发下压倒数据库。

你可能感兴趣的:(缓存,面试,redis)