Redis8中的布谷鸟过滤器

259 阅读2分钟

前言

Redis8新增布谷鸟过滤器,也是一种概率过滤器,用来判断集合中元素存在与否,跟布隆过滤器差不多,在某些场景下表现还可能优于布隆过滤器

布谷鸟过滤器

新增布谷鸟过滤器

使用CF.RESERVE创建布谷鸟过滤器

CF.RESERVE key capacity [BUCKETSIZE bucketsize] [MAXITERATIONS maxiterations] [EXPANSION expansion]

key: 过滤器键值

capacity: 过滤器容量

bucketsize: 每个桶中的项目数

MAXITERATIONS: 决定了寻找传入指纹槽位的尝试次数

expansion: 创建新过滤器时,其大小是当前过滤器大小乘以 expansion

创建过滤器

CF.RESERVE qq  1000

创建一个名为qq的布谷鸟过滤器

image.png 重复创建会报

image.png

CF.ADD添加元素

使用

CF.ADD key item

添加元素

image.png 重复添加也可以

image.png

CF.ADDNX

CF.ADDNX命令,不存在时,才会添加元素

CF.ADDNX key item

执行

CF.ADDNX aa1 aa1

image.png 重复添加键值会报

image.png

CF.COUNT

CF.COUNT命令是判断元素添加次数

CF.COUNT key item

image.png

CF.DEL

CF.DEL命令是删除一次元素,对于多次添加的,还是会存在

CF.DEL key item

执行命令

CF.DEL aa aa

image.png 再次执行

CF.COUNT aa aa

输出结果为

image.png

CF.EXISTS

CF.EXISTS是判断元素是否存在

CF.EXISTS key item

执行命令

CF.EXISTS aa aa

输出结果为

image.png

找一个没有的元素

image.png

CF.MEXISTS

CF.MEXISTS批量判断元素是否存在

CF.MEXISTS key item [item ...]

执行命令

CF.MEXISTS aa aa aa1 aa2

输出结果为

image.png

CF.INFO

CF.INFO命令查看布谷鸟过滤器信息

image.png

不存在会报错

image.png

CF.INSERT

CF.INSERT创建一个布谷鸟过滤器,并添加元素

CF.INSERT key [CAPACITY capacity] [NOCREATE] ITEMS item [item ...]

执行命令

CF.INSERT qq CAPACITY 1000 ITEMS  hello hello1 hello2

输出结果为

image.png

不存在则会创建

image.png

CF.INSERTNX

CF.INSERTNX不存在则添加

CF.INSERTNX key [CAPACITY capacity] [NOCREATE] ITEMS item [item ...]

执行

CF.INSERTNX qq1 CAPACITY 1000 ITEMS  hello hello1 hello2 HELLO3

输出结果为

image.png

总结

Redis8新增布谷鸟过滤器,现在可以借助Redis工具存,而不用自己写