Documentation
¶
Overview ¶
Package bloomx 提供进程内布隆过滤器。
用于本地去重与存在性预检:Test 返回 false 表示一定不存在, 返回 true 表示可能存在(误判率受 fpRate 控制)。适合缓存穿透防护、 重复事件过滤等场景;仅内存存活,不做持久化与跨进程共享。
用法 ¶
bf := bloomx.New(10000, 0.01) // 预计 1 万元素、1% 误判率
bf.Add("event-42")
bf.Test("event-42") // true(可能存在)
bf.Test("other") // false(一定不存在)
设计说明 ¶
- 非法入参(fpRate 不在 (0,1)、estElements<=0)归一为文档化默认值, 不返回 error——参数错了只是精度损失,不值得让调用方写错误分支
- 哈希用 Kirsch-Mitzenmacher 双哈希(h1/h2 均基于 encoding.Fnv1a64, 消费前过 64 位 finalizer 补 FNV 低位雪崩),每元素只算两次 FNV 派生 k 个位置
- 并发安全(sync.RWMutex):Add/Reset 走写锁,Test 走读锁
Index ¶
Constants ¶
View Source
const ( // DefaultEstElements 是 estElements 非法(<=0)时归一采用的默认容量。 DefaultEstElements = 1024 // DefaultFPRate 是 fpRate 非法(不在 (0,1) 开区间)时归一采用的默认误判率。 DefaultFPRate = 0.01 )
Variables ¶
This section is empty.
Functions ¶
This section is empty.
Types ¶
type Filter ¶
type Filter struct {
// contains filtered or unexported fields
}
Filter 是进程内布隆过滤器。 Test 返回 false 表示一定不存在;返回 true 表示可能存在(误判率 <= fpRate)。 必须经 New 创建,零值不可用。
func New ¶
New 创建布隆过滤器。estElements 为预计元素数量,fpRate 为目标误判率 (如 0.01 表示 1%)。非法入参归一为文档化默认值:estElements<=0 取 DefaultEstElements,fpRate 不在 (0,1) 取 DefaultFPRate。
位数组长度 m = ceil(-n·ln p / (ln2)²),向上取 2 的幂(与奇数 h2 配合 保证每条哈希序列完整覆盖位数组,取模同时退化为位掩码),下限 64; 哈希函数个数 k = ceil(m/n·ln2),下限 1。
Click to show internal directories.
Click to hide internal directories.