原创转载请注明出处:https://www.cnblogs.com/agilestyle/p/11632622.html

背景

比如刷抖音的时候,抖音会不停的推荐新的内容,而它每次推荐时候都要去重,以去掉那些我们已经看过的内容,问题是抖音是如何实现推送去重的?

Bloom Filter方案

Bloom Filter就是专门用来解决这种去重问题的。它在起到去重作用的同时,在空间上还能节省90%以上,但是稍微有点不精确,有一定的误判概率。

可以把布隆过滤器理解成一个不怎么精确的set结构,当使用它的contains方案判断某个对象是否存在时,它可能会误判。但是布隆过滤器也不是特别不精确,只要参数设置的合理,它的精确度也可以控制的相对足够精确,只会有小小的误判概率。

Redis官方提供的布隆过滤器到了Redis4.0提供了插件功能之后才正式登场。布隆过滤器作为一个插件加载到Redis Server中,给Redis提供了强大的布隆去重功能。

两个基本指令

bf.add

bf.exists

空间占用统计

https://krisives.github.io/bloom-calculator/

布隆过滤器的其他应用

  • 爬虫系统,对URL进行去重,已经爬过的网页就可以不用再爬了,可以大幅降低去重存储消耗。
  • NoSQL数据库中例如HBase,使用布隆过滤器可以显著降低数据库的IO请求量。当用户来查询某个row时,可以先通过内存中的布隆过滤器过滤掉大量不存在的row请求,然后再去磁盘进行查询。
  • 邮箱系统的垃圾邮件过滤功能也普遍用到来布隆过滤器,当然也会有某些正常的邮件被放进垃圾邮件目录中,误判所致,概率比较低。

最新文章

  1. List [][]
  2. Oracle内置函数:时间函数,转换函数,字符串函数,数值函数,替换函数
  3. 修改Oracle监听端口
  4. 关于c++风格 code style
  5. Linux-Nginx之sendfile与上下文切换
  6. zookeeper集群的安装
  7. Freemarker生成静态代码实例
  8. Java学习之路:ArrayList用法
  9. 如何使程序运行在UI线程
  10. [struts2学习笔记] 第五节 编写struts2的action代码
  11. Leetcode_36_Valid Sudoku
  12. ASP.NET Identity 二 (转载)
  13. 安装 Keepalived
  14. Win10系列:VC++媒体播放控制3
  15. 冲刺博客NO.3
  16. ADOX创建ACCESS 表时,几个附加属性
  17. 5月31日上课笔记-Mysql简介
  18. 一个杀不死的小强,kill进程无效的原因 记录故障排查过程中kill进程无效的分析过程
  19. Struts2 引入
  20. Luogu P3265 [JLOI2015]装备购买

热门文章

  1. Oracle dmp文件(表)导入与导出
  2. 学习笔记11 EF查询相当于sql 中的 where in
  3. [CSP-S模拟测试]:X国的军队(贪心)
  4. C#如何获取系统downloads和documents路径
  5. win10下VMware15运行ubuntu18.04无法和主机之间复制粘贴问题
  6. (\w+)\s*, \s*(\w+)
  7. SVG绘制随机的柱形图+php
  8. IDEA activate-power-mode插件
  9. jQuery基础--创建节点和 添加节点
  10. Linux的mysql部署