bloomx

package
v0.34.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Nov 4, 2026 License: MIT Imports: 4 Imported by: 0

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

func New(estElements int, fpRate float64) *Filter

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。

func (*Filter) Add

func (f *Filter) Add(s string)

Add 添加元素(字符串便捷形式)。

func (*Filter) AddBytes

func (f *Filter) AddBytes(b []byte)

AddBytes 添加元素。 布隆过滤器只做存在性预检,不返回"是否为新元素"。

func (*Filter) Bits

func (f *Filter) Bits() int

Bits 返回位数组长度(位)。

func (*Filter) HashFuncs

func (f *Filter) HashFuncs() int

HashFuncs 返回哈希函数个数 k。

func (*Filter) Reset

func (f *Filter) Reset()

Reset 清空全部位(保留 m/k 配置,可继续复用)。

func (*Filter) Test

func (f *Filter) Test(s string) bool

Test 报告元素是否可能存在(字符串便捷形式)。

func (*Filter) TestBytes

func (f *Filter) TestBytes(b []byte) bool

TestBytes 报告元素是否可能存在。 false 表示一定不存在;true 表示可能存在(误判率 <= fpRate)。

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL