filter

package
v1.3.2 Latest Latest
Warning

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

Go to latest
Published: Apr 12, 2024 License: AGPL-3.0 Imports: 7 Imported by: 0

Documentation

Index

Constants

This section is empty.

Variables

View Source
var BigFilterManager = NewFilterManager(18, 1<<18, 300)
View Source
var DefaultFilterManager = NewFilterManager(12, 1<<15, 80)

Functions

func FilterPorts added in v1.2.9

func FilterPorts(sourcePorts, excludePorts string) []int

FilterPorts 接受两个字符串形式的端口列表作为参数,返回一个新的端口列表, 其中包含了在 `ports1` 中但不在 `ports2` 中的所有端口。 这个函数首先将两个输入字符串解析为端口列表,然后创建一个映射(或集合)来存储 `ports2` 中的所有端口。 然后,它遍历 `ports1` 中的每个端口,如果这个端口不在 `ports2` 中,那么它就会被添加到结果列表中。 最后,函数返回结果列表,其中包含了所有只在 `ports1` 中出现的端口。 Example: ``` FilterPorts("1-10", "2-10") // [1] ```

func NewDirCuckoo

func NewDirCuckoo() *cuckoo.Filter

NewDirCuckoo 极限容量约 100 万

func NewGenericCuckoo

func NewGenericCuckoo() *cuckoo.Filter

默认参数的过滤容器, 全局使用一个容易造成碰撞, 因此拆分成四个 NewGenericCuckoo 极限容量约 400 万

func NewPathCuckoo

func NewPathCuckoo() *cuckoo.Filter

NewPathCuckoo 极限容量约 200 万

func NewWebsiteCuckoo

func NewWebsiteCuckoo() *cuckoo.Filter

NewWebsiteCuckoo 极限容量约 40 万

func RemoveDuplicatePorts added in v1.2.9

func RemoveDuplicatePorts(ports1, ports2 string) []int

RemoveDuplicatePorts 解析两个字符串形式的端口列表,并使用布谷鸟过滤器进行去重。 这个函数首先创建一个布谷鸟过滤器,然后将两个输入字符串解析为端口列表。 接着,它遍历这两个列表,将每个端口添加到布谷鸟过滤器中,如果这个端口之前没有被添加过, 那么它也会被添加到结果列表中。最后,函数返回结果列表,其中包含两个输入字符串中的所有唯一端口。 Example: ``` RemoveDuplicatePorts("10086-10088,23333", "10086,10089,23333") // [10086, 10087, 10088, 23333, 10089] ```

Types

type Config

type Config struct {
	TTL           int64 `json:"ttl" yaml:"ttl"`                       // 去重时间窗,秒为单位
	CaseSensitive bool  `json:"case_sensitive" yaml:"case_sensitive"` // 是否对 URL 中的大小写敏感
	Hash          bool  `json:"hash" yaml:"hash"`                     // 是否将 URL hash 作为去重因素
	Query         bool  `json:"query" yaml:"query"`                   // 是否将 query 作为去重因素, 若为 true, 那么 ?a=b 和  ?a=c 将被视为两个链接
	Credential    bool  `json:"credential" yaml:"credential"`         // 是否将认证信息作为去重因素,若为 true, 登录前后的同一页面可能会被扫描两次
	Rewrite       bool  `json:"rewrite" yaml:"rewrite"`               // 是否启用 rewrite 识别
}

func NewDefaultConfig

func NewDefaultConfig() *Config

func (*Config) Clone

func (c *Config) Clone() *Config

type FilterManager added in v1.3.2

type FilterManager struct {
	// contains filtered or unexported fields
}

func NewFilterManager added in v1.3.2

func NewFilterManager(filterEntries, filterTotal uint, capacity int) *FilterManager

func (*FilterManager) DequeueFilter added in v1.3.2

func (m *FilterManager) DequeueFilter() *StringFilter

func (*FilterManager) EnqueueFilter added in v1.3.2

func (m *FilterManager) EnqueueFilter(f *StringFilter)

type StringFilter

type StringFilter struct {
	sync.Mutex
	// contains filtered or unexported fields
}

func NewBigFilter added in v1.3.2

func NewBigFilter() *StringFilter

func NewFilter

func NewFilter() *StringFilter

func NewFilterWithSize added in v1.2.7

func NewFilterWithSize(entries, total uint) *StringFilter

func NewStringFilter

func NewStringFilter(config *Config, container *cuckoo.Filter) *StringFilter

func NoCacheNewFilter added in v1.3.2

func NoCacheNewFilter() *StringFilter

NewFilter 创建一个默认的字符串布谷鸟过滤器,布谷鸟过滤器用于判断一个元素是否在一个集合中,它存在极低的假阳性(即说存在的元素实际上不存在),通常这个集合中的元素数量非常大才会使用布谷鸟过滤器。 Example: ``` f = str.NewFilter() f.Insert("hello") f.Exist("hello") // true ```

func (*StringFilter) Clear added in v1.3.1

func (s *StringFilter) Clear()

func (*StringFilter) Close added in v1.3.2

func (f *StringFilter) Close()

func (*StringFilter) Exist

func (s *StringFilter) Exist(str string) bool

func (*StringFilter) Insert

func (s *StringFilter) Insert(str string) bool

返回值是 true,插入成功,false 容器满了, 无法继续添加

Jump to

Keyboard shortcuts

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