Redis----布隆过滤器

这篇具有很好参考价值的文章主要介绍了Redis----布隆过滤器。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

背景

解决方案

什么是布隆过滤器

布隆过滤器的原理

一些其他运用


背景

比如我们在观看新闻或者刷微博的时候,会不停地给我们推荐新的内容,我们发现几乎没有重复的,说明后台已经进行了去重处理,基于如何去重,Redis给出了高效的方案---布隆过滤器

解决方案

1.记录已经浏览过的,再次推送时遍历记录。但是如果用户量很大的时候,性能大大受限。而且频繁从数据库中读存,并发量过高容易崩溃;

2.使用缓存?缓存撑的过一时撑不过一世;

什么是布隆过滤器

粗略的理解为一个不怎么精确的set,当用它自带的contains方法判断某个对象是否存在的时候,得到的结果可能是假的,他会误判,就是说如果他说有,这个对象可能不存在,但是如果他说没有,一定是没有的。这样的准确度其实已经非常不错了。

基于上面的背景,它很好的可以做到推送没有见过的内容,但也有一小部分已经被过滤(没看过),因为产生了误判,它以为有这个值,所以这样的话以一点点的代价实现了用户不会看到已经看过的内容。

布隆过滤器的原理

有上面的特点完全是由于他的数据结构决定的。

每个布隆过滤器对应到Redis的数据结构是一个大型的位数组(之前提到过位图Redis --- 位图,不了解的可以去看下这个链接) 和几个不一样的hash函数,并且这几个hash函数会把值算的很均匀。

原理来啦::!!!

1. 当往布隆add的时候,添加的key会被多个hash函数进行计算,得到整数后对位数组长度进行取模运算,会得到多个位置,并且把这些位置都置为1.

2.当运行contains时,询问key是否存在,和add一样,也会把hash得到的位置都算出来,然后看一下对应位置的值是否是1,如果有一个为0,那么这个值一定不存在。但是如果都是1,也不一定说明它一定存在,只是有可能存在,因为多个值的key可能覆盖了这些位置。

思考一个问题,位数组稀疏的话,这个概率会大还是小?下方投票哦~

所以我们在使用的时候,如果实际元素远大于初始大小,需要尽快重建,重新分配一个更大size的过滤器,再将历史元素批量add进去。

一些其他运用

在爬虫系统中,我们需要对 URL 进行去重,已经爬过的网页就可以不用爬了。但是URL 太多了,几千万几个亿,如果用一个集合装下这些 URL 地址那是非常浪费空间的。这时候就可以考虑使用布隆过滤器。它可以大幅降低去重存储消耗,只不过也会使得爬虫系统错过少量的页面。

布隆过滤器在 NoSQL数据库领域使用非常广泛,我们平时用到的 HBase、Cassandra还有 LevelDB、RocksDB 内部都有布隆过滤器结构,布隆过滤器可以显著降低数据库的 10请求数量。当用户来查询某个 row 时,可以先通过内存中的布隆过滤器过滤掉大量不存在的row 请求,然后再去磁盘进行查询。

邮箱系统的垃圾邮件过滤功能也普遍用到了布隆过滤器,因为用了这个过滤器,所以平时也会遇到某些正常的邮件被放进了垃圾邮件目录中,这个就是误判所致,概率很低。 文章来源地址https://www.toymoban.com/news/detail-696846.html

到了这里,关于Redis----布隆过滤器的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Redis系列--布隆过滤器(Bloom Filter)

    在实际开发中,会遇到很多要判断一个元素是否在某个集合中的业务场景,类似于垃圾邮件的识别,恶意ip地址的访问,缓存穿透等情况。类似于缓存穿透这种情况,有许多的解决方法,如:redis存储null值等,而对于垃圾邮件的识别,恶意ip地址的访问,我们也可以直接用 H

    2024年02月09日
    浏览(40)
  • Redis系列16:聊聊布隆过滤器(原理篇)

    Redis系列1:深刻理解高性能Redis的本质 Redis系列2:数据持久化提高可用性 Redis系列3:高可用之主从架构 Redis系列4:高可用之Sentinel(哨兵模式) Redis系列5:深入分析Cluster 集群模式 追求性能极致:Redis6.0的多线程模型 追求性能极致:客户端缓存带来的革命 Redis系列8:Bitmap实现

    2024年02月08日
    浏览(41)
  • Redis之布隆过滤器(Bloom Filter)解读

    目录 引进前言 隆过滤器定义 隆过滤器原理  布隆过滤器优缺点 布隆过滤器的使用场景 布谷鸟过滤器(了解)  引进前言 在实际开发中,会遇到很多要 判断一个元素是否在某个集合中 的业务场景,类似于垃圾邮件的识别,恶意ip地址的访问,缓存穿透等情况。类似于缓存穿透

    2024年02月09日
    浏览(40)
  • Springboot 在 redis 中使用 Guava 布隆过滤器机制

    在 pom.xml 文件中,引入Spring Boot和Redis相关依赖 创建一个布隆过滤器配置类 BloomFilterConfig : 创建一个BloomFilterController。使用布隆过滤器判断数据是否存在,从而避免缓存穿透: 向里面添加元素  获取元素

    2024年02月12日
    浏览(37)
  • Springboot 在 redis 中使用 BloomFilter 布隆过滤器机制

    在 pom.xml 文件中,引入Spring Boot和Redis相关依赖 创建一个布隆过滤器配置类 BloomFilterConfig : 创建一个BloomFilterController。使用布隆过滤器判断数据是否存在,从而避免缓存穿透: 向里面添加元素  获取元素

    2024年02月13日
    浏览(39)
  • Redis布隆过滤器的原理和应用场景,解决缓存穿透

    目录 一、redis 二、布隆过滤器 三、缓存穿透问题 四、布隆过滤器解决缓存穿透   Redis(Remote Dictionary Server)是一种开源的内存数据存储系统,也是一个使用键值对(Key-Value)方式的高性能数据库。Redis以其快速、灵活和丰富的数据结构而闻名,常用于缓存、队列、实时数据

    2024年02月13日
    浏览(45)
  • 【C++学习】哈希的应用—位图与布隆过滤器

    文章简介 : 在这篇文章中,你会学习到关于哈希思想的最常见的两个应用,也就是 位图 与 布隆过滤器 , 文章会讲解位图和布隆过滤器的概念,底层实现,对应的适应的场景,以及相关经典 海量数据面试题 及解析。 所谓位图,就是用每一位来存放某种状态,适用于 海量

    2024年04月14日
    浏览(60)
  • 深入理解PHP+Redis实现布隆过滤器(亿级大数据处理和黑客攻防必备)

    英文名称Bloom Filter,用于判断一个元素是否在一个大数据集合中,如果检测到存在则有可能存在,如果不存在则一定不存在。 Redis官网对于布隆过滤器的说明:https://redis.io/docs/data-types/probabilistic/bloom-filter/ 防止缓存穿透:用于快速判断某个商品数据是否存在于缓存中,如果存

    2024年04月09日
    浏览(45)
  • C++ 哈希+unordered_map+unordered_set+位图+布隆过滤器(深度剖析)

    想象一下,你有一个巨大的图书馆,里面摆满了成千上万本书。如果你想要找到其中一本特定的书,你会怎么做?如果你按照书的编号来有序地排列它们,找到特定的书本可能会很容易。但是,如果书籍是随机地摆放,你可能需要逐本地查找,这个过程会非常耗时。 而哈希函

    2024年02月21日
    浏览(52)
  • python+redis实现布隆过滤器(含redis5.0版本以上和5.0以下版本的两份代码)

    布隆过滤器是一种空间效率极高的概率数据结构,用于测试一个元素是否是集合的成员。如果布隆过滤器返回 False ,则元素绝对不在集合中。如果返回 True ,则元素可能在集合中,但也可能是一个误报。布隆过滤器利用了多个不同的哈希函数对元素进行哈希,并将结果的位置

    2024年02月10日
    浏览(42)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包