Redis布隆过滤器原理及应用场景「建议收藏」

Redis布隆过滤器原理及应用场景「建议收藏」1、布隆过滤器是什么?(判断某个key一定不存在)本质上布隆过滤器是一种数据结构,比较巧妙的概率型数据结构特点是高效地插入和查询,可以用来告诉你“某样东西一定不存在或者可能存在”。相比于传统的List、Set、Map等数据结构,它更高效、占用空间更少,但是缺点是其返回的结果是概率性的,而不是确切的。使用:1.布隆过滤器在NoSQL数据库领域中应用的非常广泛2….

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE稳定放心使用

1、布隆过滤器是什么?(判断某个key一定不存在)

  1. 本质上布隆过滤器是一种数据结构,比较巧妙的概率型数据结构

  2. 特点是高效地插入和查询,可以用来告诉你 “某样东西一定不存在或者可能存在”。

  3. 相比于传统的 List、Set、Map 等数据结构,它更高效、占用空间更少,但是缺点是其返回的结果是概率性的,而不是确切的。

使用:

1. 布隆过滤器在NoSQL数据库领域中应用的非常广泛

2. 当用户来查询某一个row时,可以先通过内存中的布隆过滤器过滤掉大量不存在的row请求,然后去再磁盘进行查询

3. 布隆过滤器说某个值不存在时,那肯定就是不存在,可以显著降低数据库IO请求数量

2、应用场景

1)场景1(给用户推荐新闻)

  1. 当用户看过的新闻,肯定会被过滤掉,对于没有看多的新闻,可能会过滤极少的一部分(误判)。

  2. 这样可以完全保证推送给用户的新闻都是无重复的。

2)场景2(爬虫url去重)

  1. 在爬虫系统中,我们需要对url去重,已经爬取的页面不再爬取

  2. 当url高达几千万时,如果一个集合去装下这些URL地址非常浪费空间

  3. 使用布隆过滤器可以大幅降低去重存储消耗,只不过也会使爬虫系统错过少量页面

3、布隆过滤器原理

  1. 每个布隆过滤器对应到Redis的数据结构是一个大型的数组和几个不一样的无偏hash函数

  2. 如下图:f、g、h就是这样的hash函数(无偏差指让hash映射到数组的位置比较随机)

添加:值到布隆过滤器

  • 1)向布隆过滤器添加key,会使用 f、g、h hash函数对key算出一个整数索引,然后对长度取余

  • 2)每个hash函数都会算出一个不同的位置,把算出的位置都设置成1就完成了布隆过滤器添加过程

查询:布隆过滤器值

  • 1)当查询某个key时,先用hash函数算出一个整数索引,然后对长度取余

  • 2)当你有一个不为1时肯定不存在这个key,当全部都为1时可能有这个key

  • 3)这样内存中的布隆过滤器过滤掉大量不存在的row请求,然后去再磁盘进行查询,减少IO操作

删除:不支持

  • 1)目前我们知道布隆过滤器可以支持 add 和 isExist 操作

  • 2)如何解决这个问题,答案是计数删除,但是计数删除需要存储一个数值,而不是原先的 bit 位,会增大占用的内存大小。

  • 3)增加一个值就是将对应索引槽上存储的值加一,删除则是减一,判断是否存在则是看值是否大于0。

在这里插入图片描述

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/188256.html原文链接:https://javaforall.net

(0)
上一篇 2026年4月17日 上午9:07
下一篇 2026年4月17日 上午9:13


相关推荐

  • 成为java高手的八大条件

    成为java高手的八大条件

    2022年2月21日
    39
  • react拖拽排序组件_uniapp拖拽生成器

    react拖拽排序组件_uniapp拖拽生成器移动端的拖拽排序在react中实现 了解一下

    2022年4月20日
    217
  • 跟着IT彭于晏学JAVA之面向对象

    跟着IT彭于晏学JAVA之面向对象1 什么是面向对象面向过程 我应该干什么重在过程事务执行者 挑选一个电脑 台式 1 挑一个 cpuIntelCore 2 挑一个主板华硕 3 挑一个显卡七彩虹影驰 9600GT 4 挑一个显示器面向对象 重点在对象我该找谁干什么指挥者 找一个懂电脑的人帮你去买电脑 更贴近人的思维 懒人思维 2 面向对象的好处面向对象

    2026年3月17日
    2
  • 毕业一年

    又到毕业季,一年就这么过来了,这一年独自在北京,过的单调但也充实,就做了两件事,减肥和学习。减肥在校期间不怎么运动,偶尔跑步但抵不过吃的多,永远是饭桌上吃到最后的人,肉不停的长,最胖时90kg。去年年底的时候,有一天照镜子,捏着肚子上的肉实在看不下去,下决心减肥。左图87kg到右图71kg,体脂从25降到18左右。 减肥的过程是痛苦的,但是成就感爆棚,让人更加自信,也更加相信付出会有回报。学习看

    2022年3月11日
    37
  • 一张图认识Python(附基本语法总结)

    一张图认识Python(附基本语法总结)一张图带你了解 Python 更快入门 一张图认识 Python 附基本语法总结 Python 基础语法总结 1 Python 标识符在 Python 里 标识符有字母 数字 下划线组成 在 Python 中 所有标识符可以包括英文 数字以及下划线 但不能以数字开头 Python 中的标识符是区分大小写的 以下划线开头的标识符是有特殊意义的 以单下划线开头 foo

    2026年3月17日
    2
  • Arduino文档阅读笔记-RFID工作原理及RC522模块介绍

    RFID工作原理RFID(RadioFrequencyIdentification):无线射频识别RFID由2个部分组成:应答器/标签被贴在某个物体上的东东。无线接收器用于读取应答器/标签上的数据。读卡器由频射模块及高平磁场组成。Tag/应答器为待感应设备,此设备不包含电池。他只包含微型集成电路芯片及存储数据的介质以及接收和发送信号的天线。读取tag中的数据,首先要放…

    2022年4月8日
    88

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号