2023年Python使用布隆过滤器的方法:基于RedisBloom

布隆过滤器大家应该都听说过,就是通过多重hash和查看不同标识位的方法,用极小的内存实现验证某个元素是否出现在其他已有元素中的技术。

Redis则是一个基于内存的数据库,通过使用Redis中的布隆过滤器插件有助于简化数据持久化的问题。如果Python异常退出,其布隆过滤的状态也可以在Redis中留存。

在三年前,要实现一个bloom过滤器还需要在Python中构造布隆函数,并通过Redis的bitmap的方式来构建。今天查看,原来Redis已经自带来一个自带的Module来实现。除了Redis Bloom外,其他的Redis可选模块分别有:RedisSearch、RedisJson、RedisGraph、RedisTimeSeriers、RedisGears、RedisAI。一听名字就感觉是非常激动人心的特性。

其他的话不多说,下面是代码片段。

1. 启动一个带Redis Bloom的官方镜像

docker run -d --name redis-stack-server -p 127.0.0.1:6379:6379 redis/redis-stack-server:latest

2. 安装python依赖

pip3 install redis

3. 测试使用,代码样例

import redis
r = redis.Redis()
r.bf().create("bloom", 0.01, 1000)
r.bf().add("bloom", "foo")
if r.bf().exists('bloom',"foo"):
    print("foo is exists & Redis Bloom is Cool!")

运行之后,控制台输出

foo is exists & Redis Bloom is Cool!

看到这里,感觉是不是和普通的COPY来COPY去的CSDN博客没什么区别?

2023年到了,当然要有点差异化啦~ 我还专门去找了一下这个算法发明人的信息。

Bloom 算法的发明人是一位名叫 Burton Howard Bloom的年轻小伙计,在1970年在ACM上发表了一篇名为《Space/time trade-offs in hash coding with allowable errors》的论文(链接: https://dl.acm.org/doi/10.1145/362686.362692)

但是比较神奇,网络上没有关于这位计算机大神的任何照片。无独有偶,在果壳上也有一个网友有类似疑问:“Where can one find a photo and biographical details for Burton Howard Bloom, inventor of the Bloom filter?”

根据网友的分析表明:

  1. Bloom先生 1963年~1965年就读于MIT(麻省理工),主修人工智能和算法领域。 — 但是1966年没拿到学位证书
  2. 1966年没拿到学位证,开始在 Computer Corporation Of America 工作。Computer Corporation Of America是一家成立于1965年的创业公司,关注于软件开发和数据库系统研究。该公司研发了一个叫做 “Model 204”的数据库系统,这个我也没有听说过,是大型机专用的高性能数据库,后
  3. 1969年,受雇于 Computer Usage Company,并在1970年发布了bloom filter这一著名的数据结构。
  4. 2003年,Oracle有一个同名者申请了一个数据挖掘系统的专利
  5. 2011年,有人用他的名义向麻省理工捐款

非常低调的一个人,职业生涯看起来也非常长。

Reference

发表回复

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