布隆过滤器大家应该都听说过,就是通过多重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?”
根据网友的分析表明:
- Bloom先生 1963年~1965年就读于MIT(麻省理工),主修人工智能和算法领域。 — 但是1966年没拿到学位证书
- 1966年没拿到学位证,开始在 Computer Corporation Of America 工作。Computer Corporation Of America是一家成立于1965年的创业公司,关注于软件开发和数据库系统研究。该公司研发了一个叫做 “Model 204”的数据库系统,这个我也没有听说过,是大型机专用的高性能数据库,后
- 1969年,受雇于 Computer Usage Company,并在1970年发布了bloom filter这一著名的数据结构。
- 2003年,Oracle有一个同名者申请了一个数据挖掘系统的专利
- 2011年,有人用他的名义向麻省理工捐款
非常低调的一个人,职业生涯看起来也非常长。
Reference
- https://dl.acm.org/doi/10.1145/362686.362692
- https://docs.redis.com/latest/modules/redisbloom/
- https://redis-py.readthedocs.io/en/stable/redismodules.html
- https://www.quora.com/Where-can-one-find-a-photo-and-biographical-details-for-Burton-Howard-Bloom-inventor-of-the-Bloom-filter
- https://en.wikipedia.org/wiki/Computer_Corporation_of_America
- https://en.wikipedia.org/wiki/Model_204