布隆过滤器

1.布隆过滤器底层实现

首先 redis布隆过滤器的底层是个很长的二进制向量组组成的是个bitmap的数据结构,
其实就是个String, 因为redis支持的数据结构没有bitmap

2.新增和查询的实现

    是用的hash运算进行散列的,所以我们设计的时候要自己定义映射函数,他最精髓的一点就是,他可以判定某个值一定不存在,但是他判定存在的值呢不是一定存在的。

    因为他在新增的过程中,底层可以简单看做是一个二进制的数组(二进制向量组)在每一次进行映射时会调用hash函数返回映射下标,将下标位置置为1这样来判断这个数据存在,那么在多次映射过程中肯定会有数据通过hash运算后得到的下标位置是一样的,所以他的缺点就来了,就是你不能够100%的确定你通过hash运算得到的这个数据位置所在二进制数组为1的情况下这个数据是否真正的存在就会造成误判。另外,他还不能够进行删除操作因为上面提到了,多次hash得到相同位置下标,当有这种情况时,比如第2号位置有存5,9这样两个数据,你现在只要删5,但是5和9的位置下标又是一样的,当你对2号位置进行置0操作时这个位置上的9这个数据也被连带删除了,以后拿数据时就会丢失9这个数据又回去访问数据库增加压力

3.布隆过滤器解决缓存穿透

解决缓存穿透的过程:
①客户端先查询缓存->没有缓存查询过滤器(有缓存直接返回)
②初始化布隆过滤器(将所有id初始化到过滤器中,也叫预热)-->
③判断客户端发来的请求是否有编号(就是映射的mysql数据在二维数组的下标)
④如果有就查询数据库并返回数据,再添加缓存
⑤有单机版guava和分布式版本redisson

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值