布隆过滤器笔记

课程地址

布隆过滤器由一个很长的二进制向量一系列哈希函数组成

特性:布隆过滤器可以告诉我们 "某样东西一定不存在 或者可能存在",也就是说布隆过滤器说这个数不存在则一定不存在,布隆过滤器说这个数存在可能不存在。这个特性能很好地被用于解决 "Redis 缓存穿透"的问题

原理:使用多个哈希函数将同一个键值映射到不同的位置,所以布隆过滤器的时间复杂度是 O(h),其中 h 是哈希函数的个数

判断是否存在:

python 复制代码
exist = all(bitmap[hash(key)] == 1 for hash in hashers)

事实上,不同的 key 可能被映射到同一个哈希值。例如下面的例子中"你好"和 "hello" 都被映射到下标 2,出现了哈希冲突:

使用多个 hash 函数的目的就是为了避免哈希冲突导致的误判

在实际的布隆过滤器工具包中,误判率是可以配置的,且误判率越低,需要的 bitmap 越长,需要的 hash 函数个数越多,运行时间也越长

布隆过滤器的优点:

  • 速度快,空间省
  • 保密性强,不存储元素本身,只计算哈希

但是受到二进制只能存储 2 种状态的限制,布隆过滤器不能删除元素

相关推荐
农村小镇哥7 分钟前
Html的字体+字符编码+图片标签
chrome·笔记·html
rannn_11111 分钟前
【Redis|高级篇1】分布式缓存|持久化(RDB、AOF)、主从集群、哨兵、分片集群
java·redis·分布式·后端·缓存
leonkay13 分钟前
关于.NET中的队列理解
数据库·性能优化·.net·个人开发·设计规范·队列
PD我是你的真爱粉15 分钟前
Redis 持久化、过期删除、淘汰策略与内存碎片全解析
java·redis·bootstrap
斌味代码17 分钟前
Redis 分库分表实战:从垂直拆分到水平扩容完整记录
数据库·redis·bootstrap
Percep_gan20 分钟前
在芋道自定义数据权限
java·数据库
Trouvaille ~20 分钟前
【MySQL篇】表的约束:保证数据完整性
数据库·mysql·约束·数据完整性·实体完整性·域完整性·参照完整性
rchmin21 分钟前
阿里Tair分布式锁与Redis分布式锁的实现区别
数据库·redis·分布式
難釋懷23 分钟前
认识Canal
缓存
等....9 小时前
Minio使用
数据库