Redis布隆过滤器

news2024/11/19 19:17:07

什么是布隆过滤器

布隆过滤器(Bloom Filter)是一个二进制向量和一系列随机映射函数实现,用于判断一个元素是否在集合中。

如果想要判断一个元素是不是在一个集合里,一般想到的是将所有元素保存起来,然后通过比较确定。链表,树等数据结构都是这种思路。随着集合中元素的增加,需要的存储空间也越来越大,检索速度也越来越慢。

简单的说布隆过滤器是一种数据结构,是由一串很长的二进制向量组成,可以将其看成一个二进制数组。既然是二进制,那么里面存放的不是0,就是1,但是初始默认值都是0。

如图所示:

 

工作原理

布隆过滤器(Bloom Filter)是一个高空间利用率的概率性数据结构,由二进制向量(即位数组)和一系列随机映射函数(即哈希函数)两部分组成。

布隆过滤器使用exists()来判断某个元素是否存在于自身结构中。当布隆过滤器判定某个值存在时,其实这个值只是有可能存在;当它说某个值不存在时,那这个值肯定不存在,这个误判概率大约在 1% 左右。

添加数据

BloomFilter 先分配一块内存空间做 bit 数组,数组的 bit 位初始值全部设为 0。当向布隆过滤器中添加一个元素key时,采用 k 个相互独立的 Hash 函数计算,然后将元素 Hash 映射的 K 个位置全部设置为 1。

判断数据是否存在

当检测 key 是否存在时,仍然用这 k 个 Hash 函数计算出 k 个位置,如果位置全部为 1,则表明 key 存在,否则不存在。哈希函数会出现碰撞,所以布隆过滤器会存在误判。
 

优缺点

优点

  • 空间效率高,所占空间小
  • 查询时间短

缺点

  • 随着数据的增加,误判率会增加
  • 还有无法判断数据一定存在
  • 另外还有一个重要缺点,无法删除数据

使用场景

  • 大数据判断是否存在:这就可以实现出上述的去重功能,如果你的服务器内存足够大的话,那么使用 HashMap 可 能是一个不错的解决方案,理论上时间复杂度可以达到 O(1)的级别,但是当数据量起来之后,还是只能考虑布隆过滤器。
  • 解决缓存穿透:利用布隆过滤器我们可以预先把数据查询的主键,比如用户 ID 或文章 ID
  • 缓存到过滤器中。当根据 ID 进行数据查询的时候,判断该 ID 是否存在,若存在的话,则进行下一步处
  • 理。若不存在的话,直接返回,这样就不会触发后续的数据库查询,以此减少不存在的行或列的磁盘查找。需要注意的是缓存穿透不能完全解决,我们只
  • 能将其控制在一个可以容忍的范围内。
  • 业务场景中判断用户是否阅读过某视频或文章,比如抖音或头条,当然会导致一定的误判,但不会让用户看到重复的内容。还有之前自己遇到的一个比赛类的社交场景中,需要判断用户是否在比赛中,如果在则需要更新比赛内容,也可以使用布隆过滤器,可以减少不在的用户查询db或缓存的次数。
  • 缓存宕机、缓存击穿场景,一般判断用户是否在缓存中,如果在则直接返回结果,不在则查询db,如果来一波冷数据,会导致缓存大量击穿,造成雪崩效应,这时候可以用布隆过滤器当缓存的索引,只有在布隆过滤器中,才去查询缓存,如果没查询到,则穿透到db。如果不在布隆器中,则直接返回。
  • WEB拦截器,如果相同请求则拦截,防止重复被攻击。用户第一次请求,将请求参数放入布隆过滤器中,当第二次请求时,先判断请求参数是否被布隆过滤器命中。可以提高缓存命中率。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/110737.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Three JS 调研

0. 结论 three.js是使用WebGL来绘制三维效果的,核心数据是3D对象和三维模型,更多的是关注如何通过webgl更精细而美的渲染数据 three.js相当于封装了webgl,但还是很底层,并不是一个类似于cesium或者mapbox这样的成熟地图框架&…

一文掌握MyBatis的动态SQL使用与原理

摘要:使用动态 SQL 并非一件易事,但借助可用于任何 SQL 映射语句中的强大的动态 SQL 语言,MyBatis 显著地提升了这一特性的易用性。本文分享自华为云社区《MyBatis详解 - 动态SQL使用与原理》,作者:龙哥手记 。 动态 …

Ajax(JavaWeb-Ajax、跨域等)

1.JavaWeb - Ajax 概念:AJAX(Asynchronous Java JavaScript And Xml ):异步的JavaScript和Xml AJAX作用: 与服务器进行数据交换:通过AJAX可以给服务器发送请求,并获取服务器响应的数据。 使用…

笔试训练(6)

笔试题1:将一个字符串转化成整数:把字符串转换成整数__牛客网 将一个字符串转化成整数,要求不能使用字符串转化成整数的库函数,数值为0或者字符串不是一个合法的数值那么返回0 输入描述:输入一个字符串,包含数字字母符号,可以为空…

【八股文大白话整理】

Java 重载和重写的区别 这两个都是多态的一种表现形式。 重载是在编译器通过方法中形参的静态类型确定调用方法版本的过程,是多态在编译期的表现形式。判定只有两个条件:1. 方法名一致 2. 形参列表不同 重写是在方法运行时,通过调用者的实际…

Transforming the Latent Space of StyleGAN for Real Face Editing翻译

点击下载论文 摘要 尽管最近在使用StyleGAN进行语义处理方面取得了进展,但真实人脸的语义编辑仍然具有挑战性。W空间和W空间之间的差距要求在重构质量和编辑质量之间进行权衡。为了解决这个问题,我们建议通过用基于注意力的transformers替换StyleGAN映射…

深入剖析Arthas源码

一. 前言 Arthas 相信大家已经不陌生了,肯定用过太多次了,平时说到 Arthas 的时候都知道是基于Java Agent的,那么他具体是怎么实现呢,今天就一起来看看。 首先 Arthas 是在 GitHub 开源的,我们可以直接去 GitHub 上获…

智能表格软件-FineReport JS实现自定义按钮快速给参数赋指定范围值

1. 概述 1.1 预期效果 周报、月报、季报、年报中有参数查询时,每次都需要手动选择,比较繁琐,所以就需要一种快速筛选的方法,只需点击某个按钮,就能准确定位到合适的时间范围,如下图所示: 1.2 实…

JMeter+Ant+Jenkins接口自动化测试框架

一:简介 大致思路:Jmeter可以做接口测试,也能做压力测试,而且是开源软件;Ant是基于Java的构建工具,完成脚本执行并收集结果生成报告,可以跨平台,Jenkins是持续集成工具。将这三者结合起来可以搭…

Hive+Spark离线数仓工业项目实战--环境构建(3)

项目环境配置 根据需求实现项目环境配置 实施 - 注意:所有软件Docker、Hadoop、Hive、Spark、Sqoop都已经装好,不需要额外安装配置,启动即可 配置网络:如果你的VM Nat网络不是88网段,请按照以下修改 - 修改Linux虚拟…

数据改版 | CnOpenData中国工业企业基本信息扩展数据

CnOpenData中国工业企业基本信息扩展数据 一、数据简介 拉动中国经济的三个产业中,工业企业占有特殊的地位,是推动国内经济发展的重要产业。工业是最主要的物质生产部门,为居民生活、各行业的经济活动提供物质产品,这一重要作用是…

vm虚拟机安装VMware Tools弹出‘安装程序无法自动安装

问题出现原因 这个问题是由于微软从2019年12月3日已将Windows驱动程序签名更改为使用SHA-2算法, 不支持SHA-2代码签名的旧版Windows系统将无法通过驱动程序签名验证。 也就是说你的win7或者Windows Server 2008 系统中缺少使用新算法的签名,原来的SHA-…

数据库如何加密连接

文章目录1. 前言2. 如何加密?3. 使用Druid实现加密4. 生成密文5. 添加加密配置6. 隐藏问题7. 开发环境替换公钥8. 生产环境替换公钥9. 运行原理10. 总结1. 前言 现在无论是公司的项目还是个人的项目,都会选择将源码托管在Git服务器(Gitee&am…

熬不过“冬天”,又一跨境电商平台关停

熬不过“冬天”!又一跨境电商平台关停据相关媒体报道,京东旗下跨境电商服务平台Joybuy于2022年11月4日宣布将进行“业务升级”,而后该平台的所有交易活动已经停止。据Egain News报道,“业务升级”的说法很大可能只是关停的一种“委…

【JavaEE】Cookie 和 Session

努力经营当下,直至未来明朗! 文章目录【Cookie和Session】相关方法1. HttpServletRequest类的相关方法2. HttpServletRespon类的相关方法3. HttpSession类中相关的方法:4. Cookie类中相关的方法:写一个模拟登录的案例上传文件Serv…

开源工具系列1:Cloud Custodian

对云安全的检测中,最重要的一个组成部分就是对配置的验证,今天来介绍一个开源的规则检测引擎项目,Cloud Custodian。 一、Cloud Custodian 是什么 Cloud Custodian 是用于管理公有云帐户和资源的规则引擎。规则策略用简单的 YAML 格式&#x…

【TypeScript】class类型讲解

目录 class类型 构造函数 class类的继承 可见修饰符 只读修饰符 class类型 TypeScript支持ES引入的class关键字,并为其添加了类型注解和其他语法(例如:可见性修饰符)。 class person {// 声明初始值,可省略类型注解(TS类型推论为strin…

艾美捷超氧化物歧化酶检测试剂盒,活性检测说明

细胞和细胞外环境中大量的超氧化物歧化酶(SOD)对于预防与氧化应激相关的疾病至关重要。SOD突变约占家族性肌萎缩侧索硬化症(ALS)病例的20%。SOD在预防其他神经退行性疾病(如阿尔茨海默氏症、帕金森氏症和亨廷顿舞蹈症&…

美丽田园ipo上市,它的底气从何而来?

美丽田园医疗健康产业有限公司(简称美丽田园),中国最大的传统美容服务提供商,成立近三十年来,一直致力于美与健康的发展,坚持系统化标准化管理和美与健康一站式服务,为顾客提供舒适的美与健康新体验。近日,…

Matter理论介绍-通用-1-04:桥接器-其他功能

【源码、文档、软件、硬件、技术交流、技术支持,入口见文末】 【所有相关IDE、SDK和例程源码均可从群文件免费获取,免安装,解压即用】 持续更新中,欢迎关注! 一、桥接器的配置流程 我们已经知道,桥接器和…