面试-Redis-缓存穿透

本文解释了什么是缓存穿透,即查询不存在数据导致数据库压力增大。介绍了通过缓存空对象和使用Redisson实现的布隆过滤器来减轻数据库负担,尽管布隆过滤器存在误判风险,但误判率控制在可接受范围内。

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

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

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

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

答,可以的,...

缓存空对象

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

布隆过滤器

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

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

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

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

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

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值