七叶笔记 » 数据库 » Redis中Redisson布隆过滤器的学习

Redis中Redisson布隆过滤器的学习

简介

本文基于Spring Boot 2.6.6、redisson 3.16.0简单分析Redisson布隆过滤器的使用。

布隆过滤器是一个非常长的二进制向量和一系列随机哈希函数的组合,可用于检索一个元素是否存在;

使用场景如下:

解决Redis缓存穿透问题;邮件过滤;

使用 建立一个二进制向量,所有位设置0;选择K个散列函数,用于对元素进行K次散列,计算向量的位下标;添加元素:将K个散列函数作用于该元素,生成K个值作为位下标,将向量的对应位设置为1;检索元素:将K个散列函数作用于该元素,生成K个值作为位下标,若向量的对应位都是1,则说明该元素可能存在;否则,该元素肯定不存在;

Demo

依赖

测试代码

简析

初始化

布隆过滤器的初始化方法tryInit有两个参数:

expectedInsertions:预期的插入元素数量;falseProbability:预期的错误率;

布隆过滤器可以明确元素不存在,但对于元素存在的判断是存在错误率的;所以初始化时指定的这两个参数会决定布隆过滤器的向量长度和散列函数的个数;RedissonBloomFilter.tryInit方法代码如下:

添加元素

向布隆过滤器中添加元素时,先使用一系列散列函数根据元素得到K个位下标,然后将向量中位下标对应的位设置为1;RedissonBloomFilter.add方法代码如下:

hash(long hash1, long hash2, int iterations, long size)方法中,利用根据元素得到的两个散列值,生成一系列散列函数,然后得到位下标数组;

检索元素

检索布隆过滤器中是否存在指定元素时,先使用一系列散列函数根据元素得到K个位下标,然后判断向量中位下标对应的位是否为1,若存在一个不为1,则该元素不存在;否则认为存在;RedissonBloomFilter.contains方法代码如下:

到此这篇关于Redis中Redisson布隆过滤器的学习的文章就介绍到这了,更多相关Redis Redisson布隆过滤器内容请搜索七叶笔记以前的文章或继续浏览下面的相关文章希望大家以后多多支持七叶笔记!

相关文章