首页 > 数据库 >redis应用场景--实现布隆过滤器

redis应用场景--实现布隆过滤器

时间:2023-06-08 14:57:59浏览次数:50  
标签:index hash 散列值 -- redis 布隆 url 过滤器

简述布隆过滤器的实现思路:

  假设有一个长度为n的比特数组,bit_array,数组里的每一位都是0,对于一个url或者是其他数据,使用hash算法计算出url的散列值,这个散列值当然是一个整数,暂且命名为index,index=index%n,确保index的值小于n,查看bit_array[index]是否等于1,如果等于1,表示该url已被抓取过了,如果等于0,则表示还没有被抓取,让爬虫程序取抓取这个url,同时设置bit_array[index]=1.

  当url非常多了以后,必然会发生碰撞,即两个不同的url经过hash处理后得到相同的散列值,这就麻烦了,两个url,有一个被误判,明明没有被抓取过,但比特数组里已经记录了它。

  如何解决碰撞,布隆过滤器的方法很暴力,用多个hash,这样就会产生多个散列值,这些散列值所对应的索引位置均设置为1,虽然依然会发生碰撞,但是这些位置都发生碰撞的概率就降低了。

影响效果的三个因素:

  比特数组的长度

  错误率

  hash的次数

布隆过滤器可以视为一个特殊的集合,它不能存储具体的值,它只能表示某个值是否在集合中,而且,它有一定的错误率,布隆过滤器说某个值不存在,那么就一定不存在,说某个值存在,则有一定的概率是错的。

查阅资料,有一个库可以来实现布隆过滤器,mmh3

安装方法:pip install mmh3

 

标签:index,hash,散列值,--,redis,布隆,url,过滤器
From: https://www.cnblogs.com/99kol/p/17466473.html

相关文章

  • org.springframework.data.redis.RedisSystemException: Redis exception; nested exc
    springBoot+redis.程序隔一段时间会莫名其妙的报Redis的错误.报错如下:org.springframework.data.redis.RedisSystemException:Redisexception;nestedexceptionisio.lettuce.core.RedisException:java.io.IOException:Connectionresetbypeer百度得知说:是因为re......
  • 如何通过API接口获取淘宝的商品评论
    在淘宝网上购买产品时,人们通常会查看其他客户留下的评价和评论。这些评价和评论对于购买决策非常有帮助,因为它们提供了其他客户的观点和建议。通过使用淘宝API接口,可以轻松地获取淘宝上任何商品的评论。以下是如何获取淘宝商品评论的步骤:注册账号并创建应用在申请获取淘宝商......
  • vue文档下载
    文档中{普通文字}{%图片}{%%居中图片}<template><el-date-pickerv-model="value"class="timePicker"type="day"placeholder=""format="YYYY-MM-DD"......
  • 2022 中国开源创新大赛,时序数据库 TDengine 榜上有名
    近日,2022中国互联网发展创新与投资大赛暨2022年中国开源创新大赛在北京落下帷幕,本次大赛由中央网信办信息化发展局指导,中国互联网发展基金会、中国网络空间研究院、中国互联网投资基金联合主办。非常荣幸的是,凭借着强大的开源创新能力和产品竞争力,时序数据库(TimeSeriesDatab......
  • [Multimedia][ChatGPT] 如何使用 ffmpeg 将一个包含绿幕的前景视频叠加到背景视频上,并
    要使用ffmpeg将包含绿幕的前景视频叠加到背景视频上,并将前景视频中的绿幕设置为透明色,您需要以下步骤:安装ffmpeg。首先确保您已安装了最新版本的ffmpeg。如果还没有安装,请访问官方网站下载并安装相应版本。使用chromakey过滤器将绿幕替换为透明色。chromakey过滤器可以识......
  • 矩形图的奇妙世界:揭开数据背后的故事
    在当今信息爆炸的时代,数据已经成为决策和洞察的重要基石,但海量的数据如果不经过整理和呈现,往往难以得出有意义的结论。这时候,可视化工具的作用就变得尤为重要了。在众多可视化形式中,矩形图以其简洁直观的特点受到了广泛的关注和应用。 矩形图是一种基于矩形形状的图表,通过矩形......
  • [汽车]车架号(VIN)的设计与规范
    1车架号概述VIN是英文VehicleIdentificationNumber(车辆识别代码)的缩写,也就是我们平时所说的车架号、大架号。总共由17位字符组成,是汽车唯一的身份识别信息,好比于汽车的“身份证号码”。VIN码的历史沿革在1954年,首次开始使用在1954年~1981年,由于对这些编码没有公认的标......
  • 跟着源码学IM(十一):一套基于Netty的分布式高可用IM详细设计与实现(有源码)
    本文由will分享,个人博客zhangyaoo.github.io,原题“基于Netty的IM系统设计与实现”,有修订和重新排版。1、引言本文将要分享的是如何从零实现一套基于Netty框架的分布式高可用IM系统,它将支持长连接网关管理、单聊、群聊、聊天记录查询、离线消息存储、消息推送、心跳、分布式唯......
  • Qt之MQTT编译(一)
    一、MQTT简介MQTT(MessageQueuingTelemetryTransport)是一种轻量级的、发布-订阅模式的消息传输协议。它最初是为低带宽和不稳定网络环境设计的,以支持物联网(IoT)设备之间的高效通信。MQTT的工作方式基于发布-订阅模型,其中包含两个角色:发布者(Publisher)和订阅者(Subscriber)。发......
  • SMARTPRO 5000U-Plus Programmer 烧写验证
    最新购置了一款周立功烧写器SMARTPRO5000U-PlusProgrammer,与原西尔特SUPERPRO6100对芯片的烧写支持进行对比,操作方式基本相同一、软件安装1.编程器驱动 从光盘获取程序,根据电脑的不同,安装的复杂程度不同,使用64位电脑安装较为复杂,需要修改boot(有的也不需要,我的电脑就不需......