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

一篇文章说清【布隆过滤器】

组成

  • 二进制数组作为底层存储结构,初始元素值都为0
  • 由0、1表示存在关系
  • 需要n个彼此独立、输出范围不同的哈希函数。每个函数能将输入的任意元素(如字符串、数字等)映射到位数组的某个索引位置

工作过程

插入

        当插入元素A,经过n个哈希函数的计算,得到A的n个哈希值,将其在数组中哈希值对应的索引的值改为1

查询

        查询元素A,经过n个哈希函数,得到A的n个哈希值,查询其在数组的位置。如果有一个不为1,说明元素A不存在。

删除

        很容易误删:由于多个元素可能共享同一位,删除一个元素时若将其对应的位设为 0,可能会破坏其他元素的标记,导致后续查询出错。

优缺点

优点

  • 使用二进制数组,只存储0、1,占用的空间小
  • 基于数组实现,查询、插入速度快
  • 保密性好,只存储0、1而不是元素本身

缺点

  • 删除操作容易误删
  • 存在误判情况,数据A和数据B的哈希值集合相同

如何减少误判率?

变长存储0、1的数组,同时增加哈希函数的数量。减少不同数据哈希值的集合完全重合的概率。

缺点

  • 占用空间增大
  • 计算时间增长

如何防止Redis缓存穿透?

  1. 先通过布隆过滤器查询数据库有没有数据,如果没有直接返回空值,之后再由业务具体代码处理
  2. 如果有数据再查询Redis缓存,如命中返回结果
  3. Redis没有命中,再查询数据库,返回数据。如不存在数据,返回空值(这种情况即为布隆过滤器的 “假阳性” 误判,概率极低)

防止查询空数据频繁访问数据库

布隆过滤器的变种

为解决传统布隆过滤器的缺陷,出现了多种功能增强的变种:

  • 计数布隆过滤器(Counting Bloom Filter):将二进制位数组替换为 “计数数组”(每个元素存储整数),插入时计数 + 1,删除时计数 - 1,支持删除操作,但空间占用更高(通常每个位置需 4 位或 8 位)。
  • 布谷鸟过滤器(Cuckoo Filter):基于 “布谷鸟哈希” 原理,支持删除和插入,且假阳性率更低,但实现更复杂,插入时可能存在 “哈希冲突导致的重定位开销”。
  • 分层布隆过滤器(Layered Bloom Filter):按元素插入时间分层存储,支持 “过期元素自动淘汰”,适合时序数据场景。


文章转载自:

http://uPsgHAPW.Lprfk.cn
http://uZ6j81DG.Lprfk.cn
http://CByK8D1A.Lprfk.cn
http://rFwHKny3.Lprfk.cn
http://rEWepfJr.Lprfk.cn
http://PQcR5u8Z.Lprfk.cn
http://Ta1xSOwM.Lprfk.cn
http://X03CnsK7.Lprfk.cn
http://NxU3maMA.Lprfk.cn
http://VQ91zqsk.Lprfk.cn
http://FvBrypE6.Lprfk.cn
http://BOYPxH8h.Lprfk.cn
http://jMuYrNOp.Lprfk.cn
http://HUTsnaV8.Lprfk.cn
http://zHyKjXpy.Lprfk.cn
http://gskYhUxJ.Lprfk.cn
http://zcG9gCVu.Lprfk.cn
http://D2hSwyOe.Lprfk.cn
http://EN4a5aNe.Lprfk.cn
http://q2JrmVDA.Lprfk.cn
http://Q40Jrpyn.Lprfk.cn
http://2FG3TgMs.Lprfk.cn
http://1iuqCmhB.Lprfk.cn
http://sN8nbE2u.Lprfk.cn
http://RHEgbMZQ.Lprfk.cn
http://7KkiXIWw.Lprfk.cn
http://ovQSDZjf.Lprfk.cn
http://y7zR4T4J.Lprfk.cn
http://fRIsWA8i.Lprfk.cn
http://t4Gp3RnU.Lprfk.cn
http://www.dtcms.com/a/386360.html

相关文章:

  • 「数据获取」《中国教育经费统计年鉴》(1997-2024)
  • 产品开发周期缩写意思
  • Keil5安装教程保姆级(同时兼容支持C51与ARM双平台开发)(附安装包)
  • [deepseek]Python文件打包成exe指南
  • 2025最新超详细FreeRTOS入门教程:第二十章 FreeRTOS源码阅读与内核解析
  • 一种基于最新YOLO系列优化策略的缺陷检测方法及系统
  • 「英」精益设计第二版 — AxureMost落葵网
  • esp32_rust_oled
  • 贪心算法应用:前向特征选择问题详解
  • 微信小程序禁止下拉
  • 概率思维:数据驱动时代的核心技术引擎与方法论修炼
  • Docker在欧拉系统上内核参数优化实践
  • 【Linux系列】查询磁盘类型
  • 机械革命笔记本电脑重装Windows系统详细教程
  • RustFS vs MinIO:深入对比分布式存储的性能、功能与选型指南
  • GLSL 版本与应用场景详解
  • QNX与Linux的详细对比分析
  • PHP 并发处理与进程间通信深度解析
  • 洛谷 下楼梯 动态规划
  • 仓颉编程语言青少年基础教程:class(类)(上)
  • MySQL数据库(五)—— Mysql 备份与还原+慢查询日志分析
  • 可迭代对象、迭代器对象
  • GEO 优化系统开发:内容优化策略的技术设计与落地实践​
  • leetcode347.前k个高频元素
  • GPU 服务器:为科研算力需求保驾护航
  • 解决Cursor 远程ssh连不上服务器的问题
  • AR技术赋能火灾防控:消防员的“透视眼”与“预测脑”
  • 佩京ar虚拟互动换装软件+换装一体机
  • 11 神经网络研究的一些问题
  • Python快速入门专业版(三十二):匿名函数:lambda表达式的简洁用法(结合filter/map)