布隆过滤器 以及缓存穿透问题

1. 前言

今天从客观的角度来分析下,什么是缓存穿透,什么是布隆过滤器,布隆过滤器是如何解决缓存穿透的。

2. 适合人群

  • 对布隆过滤器不熟悉的人
  • 对Redis 缓存穿透不熟悉的人

3. 开始

3.1 什么是缓存穿透

在这里插入图片描述

  • 其实通过上图我们可以知道,Redis是起到了一个缓存中间件的作用。我们会将一部分的数据保存到Redis中。当请求过来的时候,可以通过Redis获取到数据。避免了所有的请求到链接数据库,反而对数据库造成了一定的压力
  • 但是有一些恶意者 知道缓存中没有该值,反而故意进行请求。造成了请求穿透了Redis缓存,直接来请求数据库。过多的类似的请求会对数据库造成一定的压力,从而发生宕机。

3.2 什么是布隆过滤器

在这里插入图片描述

  • 其实布隆过滤器就是由一组二进制数组 以及hash函数组成
  • 我们将一个值 经过一系列的hash函数转换后,映射到了二进制数组的下标。此时我们就可以在该下标的位置标记为1. 1的话表示该值存在,反之默认0就是不存在
  • 其大概实现方式如上图所示。但是有可能出现不同的值 经过hash函数转换后,得到相同的值。从而造成了这种hash碰撞。
  • 所以布隆过滤器其实是存在一定的误差的。所以说从布隆过滤器中判断没有的话一定没有,有的话不一定有。 所以无论如何优化,误差一定是存在的。 那如何减少误差呢???

3.2.1 减小布隆过滤器误差

  • 增大数组(预估合适值)
    • 我们可以根据自己的业务需求,合理的增加数组大小,这样可以减少误差率,因为存放的位置多了,误差率自然就小了
  • 增加hash函数

3.3 布隆过滤器解决缓存穿透的问题

首先理解下缓存穿透的本质:就是缓存中没有数据,然后请求穿透了缓存直接请求数据库了。但是布隆过滤器验证数据是否存在准确率是100%的。所以正好跟Redis互补。 所以可以解决缓存穿透的问题

在这里插入图片描述

4. 结束

上述的问题其实就是布隆过滤器跟Redis缓存穿透的大致原理。如果上述有表述不对的地方也欢迎大家指正。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值