背景

一个网址大概上百个字符,大约0.1KB,
如果是一亿个网址,就需要10GB了,如
果是一百亿一千亿呢?显然这么大的规
模就很麻烦了,今天要介绍的布隆过滤
器就可以解决这个问题,而且不需要存
储下原值

原理

布隆过滤器本身的结构非常简单,就是一个一维的 bool 型的数组,刚开始的时候数组内全部都是 0,这个数组的长度是 m。对于每个新增的项,我们使用K种不同的hash算法对它计算hash值,可以得到 K 个 hash 值,我们再用这些 hash 值对 m 取模映射到数组范围内,假设是 x,最后我们把所有 x 对应的位置标记为 1。举个例子,假设我们一开始m是10,K是3。我们遇到第一个插入的数据是”线性代数“,我们对它hash之后得到1,3,5,那么我们将对应的位置标记成1.

然后我们又遇到了一个数据是”高等数学“,hash之后得到1,8,9,我们还是将对应位置赋值成1,会发现1这个位置对应的值已经是1了,我们忽略就好。

如果这个时候我们想要判断”概率统计”有没有出现过,怎么办?很简单,我们对“概率统计”再计算hash值。假设得到1,4,5,我们去遍历一下对应的位置,发现4这个位置是0,说明之前没有添加过“概率统计”,显然“概率统计”没有出现过。但是如果“概率统计”hash之后的结果是1,3,8呢?我们判断它出现过就错了,答案很简单,因为虽然1,3,8这个hash组合之前没有出现过,但是对应的位置都在其他元素中出现过了,这样就出现误差了。所以我们可以知道,布隆过滤器对于不存在的判断一定是准确的,但是对于存在的判断是有可能有错误的

PYTHON代码

# 插入元素
def bloom_filter(filter, value, hash_functions):m = len(filter)for func in hash_functions:idx = func(value) % mfilter[idx] = Truereturn filter# 判断元素
def is_member_in_filter(filter, value, hash_functions):m = len(filter)for func in hash_functions:idx = func(value) % mif not filter[idx]:return Falsereturn True

redis使用布隆过滤器

布隆过滤器 redis_redis位图-布隆过滤器相关推荐

  1. 位图布隆过滤器海量数据处理

    位图&布隆过滤器&海量数据处理 文章目录 位图&布隆过滤器&海量数据处理 一.位图 二.布隆过滤器 三.海量数据处理 一.位图 1. 位图概念: 所谓位图,就是用每一位 ...

  2. 高级数据结构——海量数据(位图,布隆过滤器)

    目录 位图 位图介绍 位图代码实现 布隆过滤器 布隆过滤器介绍 布隆过滤器代码实现 布隆过滤器的优缺点 海量数据相关题目 位图 位图介绍 位图(bitmap),适用于存储海量,非负整数,不重复的数据. ...

  3. 哈希(解决哈希冲突,封装map/set,哈希的应用{位图/布隆过滤器})

    文章目录 如何解决哈希冲突: ①闭散列:也叫开放定址法,如果发送哈希冲突了,就去找下一个空位置 ②开散列 -- 拉链法/哈希桶 封装map和set 哈希表的代码 封装的unordered_set 封装 ...

  4. C++ 第十节 ——哈希 unordered_map/unordered_set的封装 位图 布隆过滤器 海量数据处理

    我们本节继续讲解STL里的内容. 哈希表又叫做散列表,它可以用来封装unordered_map和unordered_set. 我们还是按照老规矩来,先介绍其用法,再介绍其原理,并引到哈希上来. 目录 ...

  5. 布隆过滤器 redis_redis布隆过滤器

    一布隆过滤器简介 布隆过滤器(Bloom Filter)是 1970 年由布隆提出的类似于Set的数据结构.它实际上是一个很长的二进制向量和一系列随机映射函数.布隆过滤器可以用于检索一个元素是否在一个 ...

  6. 布隆过滤器速度_布隆过滤器的分析和实现

    腾讯曾经出过这样一道面试题. 给40亿个不重复的无符号整数,没排过序.给一个无符号整数,如何快速判断一个数是否在这40亿个数中. 拿到这个题目,我们首先想到的是遍历这40亿的数字,然后一个一个找.显然 ...

  7. 布隆过滤器速度_布隆过滤器,你也可以处理十几亿的大数据

    文章收录在 GitHub JavaKeeper ,N线互联网开发必备技能兵器谱 什么是 BloomFilter 布隆过滤器(英语:Bloom Filter)是 1970 年由布隆提出的.它实际上是一个 ...

  8. Google布隆过滤器与Redis布隆过滤器详解

    一.什么是布隆过滤器? 布隆过滤器可以用来判断一个元素是否在一个集合中.它的优势是只需要占用很小的内存空间以及有着高效的查询效率.对于布隆过滤器而言,它的本质是一个位数组:位数组就是数组的每个元素都只 ...

  9. 布隆过滤器 布谷鸟过滤器 Redis 安装布隆过滤器

    布隆过滤器 &布谷鸟过滤器 & Redis 安装布隆过滤器 1.布隆过滤器 1.1 简介 百度百科:布隆过滤器(Bloom Filter)是1970年由布隆提出的.它实际上是一个很长的 ...

  10. 硬核 | Redis 布隆(Bloom Filter)过滤器原理与实战

    在Redis 缓存击穿(失效).缓存穿透.缓存雪崩怎么解决?中我们说到可以使用布隆过滤器避免「缓存穿透」. 码哥,布隆过滤器还能在哪些场景使用呀? 比如我们使用「码哥跳动」开发的「明日头条」APP 看 ...

最新文章

  1. 什么阻碍了人工智能在制造业的应用?
  2. itunes刷机一直正在恢复固件要多久_iPhone “已停用”,为什么刷机后仍是“已停用”的状态?...
  3. 智能制造深度报告发布:工业机器人、视觉与工业物联/互联网新方向
  4. 备份oracle中的大表
  5. matlab与音频处理
  6. 使下拉框某项不可选的方法
  7. $.ajax 同步一不,ajax 同步不生效
  8. 优化就是在和时间赛跑
  9. 为什么高斯分布概率密度函数的积分等于1
  10. Linux多线程同步
  11. 定位导航方案在特殊环境下的适用说明
  12. 数据结构实验 2.连续整数之和(2012年北航研究生入学考试)
  13. iOS AppIcon + launchImage+iPhone 屏幕分辨率相关知识
  14. [HNOI2015]开店
  15. learning scala 变量
  16. Spring Boot 2.x 集成 SLF4j + log4j2 日志框架
  17. h文件中报错 unterminated conditional directive的原因
  18. 达观数据:中文和英文语言差异和计算机处理的区别
  19. Outlook2013 邮件签名设置
  20. python代替云打码的超级鹰验证码识别第三方工具使用分享

热门文章

  1. hdu1864 最大报销额(01背包)
  2. Web Audio介绍
  3. 45.MySQL Cluster
  4. 15.supervisor 安装
  5. 24. yii2 表单赋值 model-load(), model-attributes 方法
  6. 4.nslookup
  7. 21. jQuery 遍历 - 后代
  8. 第2讲 ZF2.4 最新框架搭建
  9. 《数学之美》—隐含马尔可夫模型
  10. 问题:脚本之家的几个页面