Redis——1、什么是缓存穿透

一、缓存穿透是什么?

缓存穿透是前端请求指去查找一个不存在的数据,当我们在存储层也就是数据库查找不到相关数据时不会将其写入缓存,这就会导致在高并发请求时查找一个不存在的数据,数据库负载压力过大会挂掉,这就是缓存穿透,一般发生在自己的数据库被人攻击的情况下。一般用布隆过滤器解决这种问题。

二、解决办法:

1、通过Redis缓存空数据

当前端向后端发送一条不存在数据的请求时,在数据库查询没有时会缓存到Redis中一个null值,这样,当前端再次发送同样的请求时Redis会直接返回null值,而不会去给数据库增加压力,从而解决缓存穿透的问题。

方案的优点在于Redis的响应速度快,缺点就是如果Redis缓存了大量的空值的话自己的负载压力会比较大

2、通过布隆过滤器

布隆过滤器一般是来检索一个元素是否在一个集合中。可有Redission和Guava来实现一般用Redission。

为了解决Redis的负载压力,我们可以在请求发送至Redis前添加一个布隆过滤器,如果数据库中有请求查询的数据那么布隆过滤器会放行请求,如果没有则直接将请求返回给前端。

具体实现过程:使用布隆过滤器,我们会将数据库高频访问数据预热到缓存(Redis)当中,同时预热布隆过滤器,然后布隆过滤器,将热点数据的key值经过三次哈希计算得到三个哈希值(索引值)存在布隆过滤器的bitMap中bitMap是一个数组里面只存0和1,它会将这三个不同索引值存放其中,如果前端请求命中则放行,如果没有命中则直接返回请求。

布隆过滤器也有缺点:

有误判,key值的计算会发生哈希碰撞,这样会导致数据库中没有相关数据的请求被放行。

不过在大多项目中误判可以忽略掉,我们可以在布隆过滤器中设置误判率且误判率一般设置为5%。

误判率与数组的长度也有关,数组长度越长误判率越低反之。

黑马相关图解:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值