跳转到内容

core.base.bloom_filter

此模块提供布隆过滤器实现,一种用于测试元素是否是集合成员的概率性数据结构。

提示

使用此模块需要先导入:import("core.base.bloom_filter")

布隆过滤器是一种空间高效的概率性数据结构,用于测试元素是否是集合的成员。可能出现误报匹配,但不会出现漏报。这使得它在高概率检查和最小内存使用方面非常有用。

bloom_filter.new

  • 创建新的布隆过滤器

函数原型

API

lua
bloom_filter.new(opt?: <table>)

参数说明

参数描述
opt可选。配置选项:
- probability - 误报概率(默认: 0.001)
- hash_count - 哈希函数数量(默认: 3)
- item_maxn - 最大元素数量(默认: 1000000)

返回值说明

类型描述
bloom_filter返回布隆过滤器实例
nil, string失败时返回 nil 和错误消息

用法说明

lua
import("core.base.bloom_filter")

-- 使用默认设置创建新的布隆过滤器
local filter = bloom_filter.new()

-- 使用自定义设置创建
local filter = bloom_filter.new({
    probability = 0.001,
    hash_count = 3,
    item_maxn = 1000000
})

提示

支持的误报概率值: 0.1, 0.01, 0.001, 0.0001, 0.00001, 0.000001

filter:set

  • 向布隆过滤器添加元素

函数原型

API

lua
filter:set(item: <string>)

参数说明

参数描述
item必需。要添加到过滤器中的字符串元素

返回值说明

类型描述
boolean元素添加成功返回 true,如果已经存在返回 false

用法说明

lua
import("core.base.bloom_filter")

local filter = bloom_filter.new()

-- 向过滤器添加元素
if filter:set("hello") then
    print("元素添加成功")
end

-- 注意:可能出现误报
if filter:set("hello") then
    print("这不会打印 - 元素已存在")
else
    print("元素已存在(可能是误报)")
end

filter:get

  • 检查元素是否存在于布隆过滤器中

函数原型

API

lua
filter:get(item: <string>)

参数说明

参数描述
item必需。要检查的字符串元素

返回值说明

类型描述
boolean元素存在返回 true,否则返回 false

用法说明

lua
import("core.base.bloom_filter")

local filter = bloom_filter.new()

-- 添加一些元素
filter:set("hello")
filter:set("xmake")

-- 检查元素
if filter:get("hello") then
    print("hello 存在")
end

if filter:get("not exists") then
    print("这不会打印")
else
    print("元素未找到")
end

注意

布隆过滤器可能出现误报(声称元素存在但实际上不存在),但绝不会出现漏报(声称元素不存在但实际上存在)。

filter:data

  • 获取布隆过滤器数据作为 bytes 对象

函数原型

API

lua
filter:data()

参数说明

无参数

返回值说明

类型描述
bytes返回过滤器的 bytes 对象数据
nil, string失败时返回 nil 和错误消息

用法说明

lua
import("core.base.bloom_filter")

local filter = bloom_filter.new()
filter:set("hello")
filter:set("xmake")

-- 获取过滤器数据
local data = filter:data()

-- 保存或传输数据
print("过滤器大小:", data:size())

filter:data_set

  • 从 bytes 对象设置布隆过滤器数据

函数原型

API

lua
filter:data_set(data: <bytes>)

参数说明

参数描述
data必需。包含过滤器数据的 bytes 对象

返回值说明

类型描述
boolean数据设置成功返回 true

用法说明

lua
import("core.base.bloom_filter")

-- 创建第一个过滤器并添加元素
local filter1 = bloom_filter.new()
filter1:set("hello")
filter1:set("xmake")

-- 从第一个过滤器获取数据
local data = filter1:data()

-- 创建第二个过滤器并加载数据
local filter2 = bloom_filter.new()
filter2:data_set(data)

-- 两个过滤器现在包含相同的元素
assert(filter2:get("hello") == true)
assert(filter2:get("xmake") == true)

filter:clear

  • 清除布隆过滤器中的所有元素

函数原型

API

lua
filter:clear()

参数说明

无参数

返回值说明

类型描述
boolean成功返回 true,失败返回 false

用法说明

lua
import("core.base.bloom_filter")

local filter = bloom_filter.new()
filter:set("hello")
filter:set("xmake")

-- 清除所有元素
filter:clear()

-- 元素现在已移除
assert(filter:get("hello") == false)
assert(filter:get("xmake") == false)

filter:cdata

  • 获取内部 C 数据句柄

函数原型

API

lua
filter:cdata()

参数说明

无参数

返回值说明

类型描述
userdata返回内部 C 数据句柄

用法说明

lua
import("core.base.bloom_filter")

local filter = bloom_filter.new()
local cdata = filter:cdata()
print("C 数据句柄:", cdata)