通俗易懂理解——布隆过滤器
文章目录
- 概述
- 本质
- 优缺点
- 优点:
- 缺点:
- 实际应用
- 解决redis缓存穿透问题:
概述
本质
本质:很长的二进制向量(数组)
主要作用:判断一个数据在这个数组中是否存在,如果不存在为0,存在为1

实例:将“你好”存入到布隆过滤器中——插入过程
- “你好”先经过三个(N)哈希函数,分别会计算三个哈希值
- 将三个哈希值映射到数组中,将对应下标位置改为1
查询过程:我们可以根据下标到布隆过滤器中查询数据是否存在,只有当三个下标查询的结果都为1的时候才能确认数据存在。只要有一个下标的二进制数据不是1就证明不存在。

注意,布隆过滤器很难做删除操作。
删除数据:

现状:下标为2的位置存储了两个数据:你好 & hello,在这种情况下,我们就不知道下标为2的这个地方是你好还是hello。这是由于这些数据由于一系列的hash运算计算出来的哈希值是相同的,哈希值相同导致根据哈希值计算出来的下标也是相同的。
这就会导致,我们在想要删除你好的时候,将下标为2的位置的数据由1改为0,这时就将hello的数据也给删除掉了,这样就会造成数据的误删除。
优缺点
优点:
- 二进制数组组成的数据,占用空间很小
- 插入和查询的速度很快,因为他是计算哈希值,再由哈希值映射到数组下标中,基于数组的特性,他的查询和插入时非常快的。只需要根据算好的下标找对应的数据即可,所以他的时间复杂度是O(N)
- 保密性非常好,他存储的数据都是0和1,别人根本不知道0和1这两个数据代表的含义是什么,并且它本事是不存储原始数据的。
缺点:
- 很难做删除的操作
- 容易出现误判,本身不存在与集合中,但是经过一系列的运算之后,他判断这个数据是存在于这个集合当中。这是由于,不同的数据计算出来的哈希值可能是相同的。
实际应用
代码实操:

误判率是会影响误判的结果的,并且误判率越低,出现误判的结果越少,但是也会造成运算的时间增长,执行效率降低。
是否可以将误判率设置的无限小呢?
- 误判率越小,计算时间越长,性能越差。
- 需要根据自己的业务情况来进行设置
误判率的底层原理
误判率为0.03的情况

误判率为0.01的情况

误判率越低占用的空间越大,使用的哈希函数个数越多
增加哈希函数的个数是为了降低出现哈希冲突的概率,每个哈希函数的算法是不同的,所以计算出来的结果也是不同的,哈希函数越多,计算出来的哈希值也越多,他所对应的二进制数据也越多。所以就会降低误判的个数。
解决redis缓存穿透问题:
问题描述:前端需要查询一个数据,但是redis中没有这个数据,于是就会到数据库中查询,就会导致前端请求直接打到数据库上,导致数据库压力过大。

解决原理:布隆过滤器的二进制数据是全局的,若数据库中存在数据,那么布隆过滤器就会在该数据请求过后标记数据的存在. 从而避免其他大量数据库不存在的数据请求
理解:
布隆过滤器其实就是用来过滤无效请求,例如一个查询商品详情的接口,参数是 商品id,如果有人恶意用循环请求,参数是0,1,2,3这些垃圾数据,每次都要穿透redis,去请求DB,就算缓存在redis了,那时间也不会长。这个时候可以把id 放在布隆过滤器中,先去判断传入的id 是否在布隆过滤器中,存在,就去继续后续流程,如果不存在,就认为是无效id ,直接返回。
相关文章:
通俗易懂理解——布隆过滤器
文章目录概述本质优缺点优点:缺点:实际应用解决redis缓存穿透问题:概述 本质 本质:很长的二进制向量(数组) 主要作用:判断一个数据在这个数组中是否存在,如果不存在为0,…...
TypeScript 学习之类型推导
在一些情况下,代码上没有显性明确类型,typescript 可以隐形推断出类型。 基础 let x 3;变量x的类型被推断为数字。 类型推断发生在初始化变量和成员,设置默认参数值和决定函数返回值时 最佳通用类型 let x [0, 1, null]; // 类型为 numb…...
Android四大组件——Service详解
Service 为后台运行,不可见,没有界面。优先级高于Activity(内存不足时先杀掉Activity),运行在主线程且不能做耗时操作。 一、Service 启动方式 1、startService() 通过 startService 启动后,service会一直…...
svg转png
svg转png写了一个spring boot项目,支持传入svg文件转出png图片,并且自定义转出png的宽和高。主要代码如下:所需依赖如下:演示如下:首先,运行项目使用接口调用工具调用接口发送请求,提取文件1000…...
教你如何搭建人事OA-员工管理系统,demo可分享
1、简介1.1、案例简介本文将介绍,如何搭建人事OA-员工管理。1.2、应用场景人事OA-员工管理应用对员工信息进行管理,可办理入职、转正、离职等流程。2、设置方法2.1、表单搭建1)新建表单【员工管理】,字段设置如下:名称…...
C++递推基础知识
文章目录一、递推的概念二、递推和递归的区别三、递推的实例1、最基础的:斐波那契数列2、变形版斐波那契数列3、较复杂的递推式求解:昆虫繁殖4、经典逆推问题:题目数量一、递推的概念 1、什么是递推算法? 递推算法:是…...
【Python入门第十天】Python 布尔
布尔表示两值之一:True 或 False。 布尔值 在编程中,通常需要知道表达式是 True 还是 False。 可以计算 Python 中的任何表达式,并获得两个答案之一,即 True 或 False。 比较两个值时,将对表达式求值,P…...
WebDAV之π-Disk派盘+Piktures
Piktures支持WebDAV方式连接π-Disk派盘。推荐一款简单易用,功能超级强大的智能相册应用。Piktures智能相册是一款简单易用,功能超级强大的智能相册应用,它不仅可以访问本地和云照片,还可以照片编辑器,而且它同时还是一…...
Revit问题:Navisworks中导入的rvt模型角度不正确调整
一、Navisworks中导入的rvt模型角度不正确调整方法 通常情况下,我们做好一个Revit模型,有时候出于成果保护或者鉴于Revit自带的碰撞检测效果不够直观、Revit模型体量太大,需要一个轻量化的模型展示,我们通常情况下会使用Autodesk公…...
最全正则验证
一、校验数字的表达式 1. 数字:^[0-9]*$ 2. n位的数字:^\d{n}$ 3. 至少n位的数字:^\d{n,}$ 4. m-n位的数字:^\d{m,n}$ 5. 零和非零开头的数字:^(0|[1-9][0-9]*)$ 6. 非零开头的最多带两位小数的数字:…...
阿里云服务器入门使用流程 新手学习教程
一、阿里云根据个人需要选合适的云服务器,选好cpu、内存、带宽,地域,这四个是主要的。其他可以默认选择。 二、登陆控制台 输入账号密码,进去看到服务界面,新手可能不容易看懂。点击左侧菜单,点击云服务器…...
git学习
一.实际场景 数据备份代码还原协同开发追溯问题代码的编写人和编写时间 二.Git工作流程图 三.获取本地仓库 四.git add和git commit git status:查看修改的状态(暂存区,工作区) git add . :通配符,添加当…...
新建一个完整的react项目和完善初始项目
一:新建一个完整的react项目 1.环境准备 目前我的环境是 node:16.17.1 npm: 8.15.0 查看环境:1):打开命令提示符工具,利用node -v和npm -v 查看一下自己的环境,如果觉得重新卸载、安装node比较…...
HIVE 安装
目录 启动hadoop 把hive压缩包拷贝到虚拟机里面 解压 改名 配置环境变量 新建一个hive-site.xml文件,并编辑 配置文件 添加jar包 初始化mysql 启动hive 创建数据库 使用数据库 创建表 添加数据 查看数据 删除表 安装虚拟机 安装JDK 安装Hadoop …...
jsp游泳馆门票管理系统Myeclipse开发mysql数据库web结构java编程计算机网页项目
一、源码特点 jsp游泳馆门票管理系统 是一套完善的web设计系统,对理解JSP java编程开发语言有帮助,系统具有完整的源代码和数据库,系统主要采用B/S模式开发。开发环境为 TOMCAT7.0,Myeclipse8.5开发,数据库为Mysql,…...
C++ ---智能指针详解
文章目录前言一、 为什么需要智能指针?二、内存泄漏2.1 什么是内存泄露?危害是什么?2.2 内存泄露的分类2.3 如何避免内存泄露三、智能指针的使用及原理3.1 RAII3.2 智能指针的原理3.3 std::autoptr3.4 std::unique_ptr3.5 std::shared_ptrstd::shared_ptr的循环引…...
企业带宽控制管理
在企业中保持稳定的网络性能可能具有挑战性,因为采用数字化的网络可扩展性和敏捷性应该与组织的发展同步。随着基础设施的扩展、新应用和新技术的引入,网络的带宽容量也在增加。 停机和带宽过度使用是任何组织都无法避免的两个问题,为了解决…...
MybatisPlus实现分页效果并解决错误:cant found IPage for args!
前言 早就知道MybatisPlus对分页进行了处理,但是一直没有实战用过,用的是自己封装的一个分页组件,虽不说麻烦吧,但是也不是特别简单。 写起来还是比较复杂,但是最近这个组件有了点小小的bug,我决定是时候…...
C语言赋值(关系)运算符和逗号运算符
一.赋值(关系)运算符 1.关系运算符 高优先级组 < 左边值小于右边值,则返回1。否则返回0 < 左边值小于等于右边值,则返回1。否则返回0 > 左边值大于右边值,则返回1。否则返回0 > 左边值大于等于右边值,则返回1。否则返回0 低优先级组…...
几种在Linux/window下查询外网IP的办法。
hello world curl ifconfig.me/ip如下图 1. 纯文本 https://ifconfig.me/ip https://ipinfo.io/ip 或 https://ipecho.net/ip 或 https://ipecho.net/plain https://www.trackip.net/ip https://icanhazip.com 2. JSON格式 https://ifconfig.me/all.json https://ipi…...
一体机-显控终端 国产化嵌入式处理板卡 产品规格说明书
一、产品概述MB-FT24A02是一款专为工业嵌入式、车载人机交互、国产化终端替代等场景设计的全国产化高性能处理板卡,采用紧凑型PCB设计,核心搭载飞腾FT-2000/4国产处理器,搭配飞腾X100专用国产桥片,构建全链路自主可控硬件平台&…...
Llama-3.2V-11B-cot保姆级教程:Streamlit界面按钮/状态/动效设计逻辑
Llama-3.2V-11B-cot保姆级教程:Streamlit界面按钮/状态/动效设计逻辑 1. 工具概览与核心价值 Llama-3.2V-11B-cot是基于Meta多模态大模型开发的高性能视觉推理工具,专为双卡4090环境优化。这个工具最大的特点是让复杂的多模态模型变得简单易用…...
动态生成展示:LiuJuan20260223Zimage模型根据实时天气创作“风晴雨雪”主题画
动态生成展示:LiuJuan20260223Zimage模型根据实时天气创作“风晴雨雪”主题画 你有没有想过,家里的数字画框或者手机壁纸,能像有生命一样,随着窗外的天气实时变化?今天,我就带你体验一个特别有意思的玩法&…...
飞书文档全流程备份终极方案:从手动操作到自动化管理的完美转型
飞书文档全流程备份终极方案:从手动操作到自动化管理的完美转型 【免费下载链接】feishu-doc-export 项目地址: https://gitcode.com/gh_mirrors/fe/feishu-doc-export 价值定位:破解企业文档管理的三大核心痛点 📊 在数字化办公日益…...
三步解锁Degrees of Lewdity中文本地化版本无缝体验:完整指南
三步解锁Degrees of Lewdity中文本地化版本无缝体验:完整指南 【免费下载链接】Degrees-of-Lewdity-Chinese-Localization Degrees of Lewdity 游戏的授权中文社区本地化版本 项目地址: https://gitcode.com/gh_mirrors/de/Degrees-of-Lewdity-Chinese-Localizati…...
Thermal Control Center:Dell G15散热管理的开源替代方案实战指南
Thermal Control Center:Dell G15散热管理的开源替代方案实战指南 【免费下载链接】tcc-g15 Thermal Control Center for Dell G15 - open source alternative to AWCC 项目地址: https://gitcode.com/gh_mirrors/tc/tcc-g15 在追求极致性能的游戏本领域&…...
别再用直方图了!用Python+OpenCV手把手教你提取图像纹理特征(GLCM实战)
别再用直方图了!用PythonOpenCV手把手教你提取图像纹理特征(GLCM实战) 当我们需要区分砂纸和丝绸的微观图像时,灰度直方图会给出完全相同的统计结果——这正是传统分析方法在纹理识别中的致命缺陷。本文将带您用OpenCV和scikit-im…...
解放你的音乐库:NCMconverter音频格式转换全攻略
解放你的音乐库:NCMconverter音频格式转换全攻略 【免费下载链接】NCMconverter NCMconverter将ncm文件转换为mp3或者flac文件 项目地址: https://gitcode.com/gh_mirrors/nc/NCMconverter 当你下载了喜爱的音乐却发现是无法播放的NCM格式时,当你…...
Qwen3-32B-Chat镜像深度优化:OpenClaw任务执行效率提升30%
Qwen3-32B-Chat镜像深度优化:OpenClaw任务执行效率提升30% 1. 为什么需要深度优化? 去年冬天,当我第一次在本地部署OpenClaw对接Qwen3-32B模型时,遇到了一个尴尬的问题:一个简单的"截图识别鼠标点击"任务链…...
AIGlasses OS Pro 模型优化实战:针对STM32F103C8T6的轻量化模型部署
AIGlasses OS Pro 模型优化实战:针对STM32F103C8T6的轻量化模型部署 最近有不少朋友在问,像AIGlasses OS Pro里那些能看懂世界的视觉模型,能不能塞进一个成本几十块钱、资源极其有限的单片机里跑起来?比如大家手头都有的那块“蓝…...
