当前位置: 首页 > news >正文

redis实现布隆过滤器

思路:

用于快速检查一个元素是否属于某个集合中。它可以快速判断一个元素是否在一个大型集合中,且判断速度很快且不占用太
多内存空间。原理是使用一组哈希函数,将元素【映射】成数组中的【索引位置】,就是将元素转成他在索引中的位置,这个位
置可以是多个,对一个数据进行多次Hash,得到多个Hash值,把这个Hash值保存到数据组中,如果来了一个新的数据,也使
用同样的操作,如果所有哈希函数操作对应的位数组值都为1,那么该元素可能在集合中。布隆过滤器优缺点:
1、时间和空间效率高
2、误判率低
3、支持高并发
缺点:
1、无法删除已添加的数据
2、误判率无法避免
3、无法精确判断元素是否存在减少误判:
1、使用多个布隆过滤器,这种方法可以显著降低误判率,但是会增加存储空间和查询时间。
2、使用加密哈希函数
3、使用高质量的哈希函数:使用高质量的哈希函数可以减少哈希冲突的概率。常见的高质量哈希函数包括MurmurHashCityHash等。

备注:

1Murmurhash: 
是一种非加密型哈希函数,适用于一般的哈希检索操作。高运算性能,低碰撞率。2CityHash:
是Google发布的字符串散列算法,和murmurhash一样,属于非加密型hash算法。CityHash算法的开发是受
到了MurmurHash的启发。其主要优点是大部分步骤包含了至少两步【独立的数学运算】。现代 CPU 通常能从这种代码获得
最佳性能。CityHash 也有其缺点:代码较同类流行算法复杂。 Google 希望为速度而不是为了简单而优化,因此没有照顾较
短输入的特例。Google 号称CityHash64 在速度方面至少能提高 30%(这个,肯定不是和murmurhash比咯),并有望提
高多达两倍。此外,这些算法的统计特性也很完备。

关于:CityHash和MurmurHash算法的区别:跳转

布隆过滤器的实现原文章 跳转

demo

redis实现布隆过滤器,使用的是BitMap,只有01两个数字//设置布隆过滤器的某个位置值为true。
redisTemplate.opsForValue().setBit(redisKey,index,Boolean.TRUE);//查询某个位置的值
redisTemplate.opsForValue().getBit(redisKey, index);  返回值是boolean类型。int abs = Math.abs(key.hashCode());
long index = (long) (abs % Math.pow(2, 32));
redisTemplate.opsForValue().getBit(redisKey, index); 当然这只使用了一个Hash函数,我们可以通过多个hash函数得到多个Index

当然不单单是redis可以实现,Guava也支持。

使用Guava布隆过滤器/**
* 布隆过滤器
*/
private static BloomFilter<Integer> bloomFilter = BloomFilter.create(Funnels.integerFunnel(), 存入数据的大小, 误判率);bloomFilter.put(i);//存入数据bloomFilter.mightContain(i)判断布隆过滤器是否包含这个元素,比如存1进去,当需要判断10是否存在时,可能也会返回true
http://www.lryc.cn/news/234224.html

相关文章:

  • 山西电力市场日前价格预测【2023-11-19】
  • 深眸科技革新升级OCR技术,与AI视觉实现有效融合赋能各行业应用
  • 性能测试知多少---系统架构分析
  • 【观察】华为:数智世界“一触即达”,应对数智化转型“千变万化”
  • 我的 2023 秋招总结,拿到了大厂offer
  • 力扣labuladong——一刷day36
  • 解锁编程潜能:探索亚马逊CodeWhisperer,打造编程世界的声音引导者
  • 01_面向对象高级_static
  • 双写绕过 [极客大挑战 2019]BabySQL 1
  • uni.app 使用 mixins 技术统一注入小程序页面分享到好友,分享朋友圈功能
  • 贝叶斯AB测试
  • 信息检索与数据挖掘 | 【实验】检索评价指标MAP、MRR、NDCG
  • 读书笔记:彼得·德鲁克《认识管理》第24章 管理岗位的设计与内容
  • 某60区块链安全之51%攻击实战学习记录
  • 为什么原生IP可以降低Google play账号关联风险?企业号解决8.3/10.3账号关联问题?
  • 排列组合C(n,m)和A(n,m)理解及代码实现
  • EasyExcel导入从第几行开始
  • 均匀光源积分球的应用领域有哪些
  • 【LeetCode】每日一题 2023_11_18 数位和相等数对的最大和(模拟/哈希)
  • 【喵叔闲扯】--迪米特法则
  • 企业视频数字人有哪些应用场景
  • LoRa模块空中唤醒功能原理和物联网应用
  • spring中的DI
  • gpt-4-vision-preview 识图
  • Spring Framework 6.1 正式发布
  • SystemVerilog学习 (11)——覆盖率
  • jQuery,解决命名冲突的问题
  • 为什么C++标准库中atomic shared_ptr不是lockfree实现?
  • Python基础入门例程58-NP58 找到HR(循环语句)
  • 航天联志Aisino-AISINO26081R服务器通过调BIOS用U盘重新做系统(windows系统通用)