redis-手动实现一个布隆过滤器

 

1.布隆过滤器简介

布隆过滤器(Bloom Filter)是1970年由布隆提出的。它实际上是一个很长的二进制向量和一系列随机映射函数。布隆过滤器可以用于检索一个元素是否在一个集合中。它的优点是空间效率和查询时间都远远超过一般的算法,缺点是有一定的误识别率和删除困难


重点 : 
  二进制向量       :  二进制的方式存放数据
  随机映射函数     :  多次运算算出位数
  误判率          :  算出有不一定有 , 算出 没有 一定 没有
  删除困难        :  多次hash 导致删除麻烦
  
布隆过滤器不存放数据 , 只存放数据经过运算后的值 
经过m次运算后 把对应bit位设置为1

 

 

2.java实现布隆过滤器方式

分布式布隆过滤器 : 
  redis实现
    1.bit实现
    2.redis插件实现(4.0之后) https://www.codercto.com/a/87070.html
    
本地布隆过滤器 :
  guava实现

 

 

3.guava使用布隆过滤器

<dependency>
    <groupId>com.google.guava</groupId>
    <artifactId>guava</artifactId>
    <version>27.1-jre</version>
</dependency>


创建布隆过滤器方法
public static <T> BloomFilter<T> create(
    Funnel<? super T> funnel, int expectedInsertions, double fpp) {
    
funnel             : 添加数据的接口
expectedInsertions : 预计添加多少数据
fpp                : 能接受的误判率
//创建
BloomFilter<String> filter = BloomFilter.create(new Funnel<String>() {
    @Override
    public void funnel(String from, PrimitiveSink into) {
        System.out.println("testadd");
        into.putString(from, Charsets.UTF_8);
    }
}, 50, 0.1);


//添加元素
filter.put("test");
//判断元素是否存在
boolean test = filter.mightContain("test");
//把另一个布隆过滤器的数据加进来
filter.putAll();

 

 

4.redis使用布隆过滤器

 

1.redis布隆过滤器实体类创建

import com.google.common.hash.Funnels;
import com.google.common.hash.Hashing;
import com.google.common.primitives.Longs;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值