前言
Redis8新增布谷鸟过滤器,也是一种概率过滤器,用来判断集合中元素存在与否,跟布隆过滤器差不多,在某些场景下表现还可能优于布隆过滤器
布谷鸟过滤器
新增布谷鸟过滤器
使用CF.RESERVE创建布谷鸟过滤器
CF.RESERVE key capacity [BUCKETSIZE bucketsize] [MAXITERATIONS maxiterations] [EXPANSION expansion]
key: 过滤器键值
capacity: 过滤器容量
bucketsize: 每个桶中的项目数
MAXITERATIONS: 决定了寻找传入指纹槽位的尝试次数
expansion: 创建新过滤器时,其大小是当前过滤器大小乘以 expansion
创建过滤器
CF.RESERVE qq 1000
创建一个名为qq的布谷鸟过滤器
重复创建会报
CF.ADD添加元素
使用
CF.ADD key item
添加元素
重复添加也可以
CF.ADDNX
CF.ADDNX命令,不存在时,才会添加元素
CF.ADDNX key item
执行
CF.ADDNX aa1 aa1
重复添加键值会报
CF.COUNT
CF.COUNT命令是判断元素添加次数
CF.COUNT key item
CF.DEL
CF.DEL命令是删除一次元素,对于多次添加的,还是会存在
CF.DEL key item
执行命令
CF.DEL aa aa
再次执行
CF.COUNT aa aa
输出结果为
CF.EXISTS
CF.EXISTS是判断元素是否存在
CF.EXISTS key item
执行命令
CF.EXISTS aa aa
输出结果为
找一个没有的元素
CF.MEXISTS
CF.MEXISTS批量判断元素是否存在
CF.MEXISTS key item [item ...]
执行命令
CF.MEXISTS aa aa aa1 aa2
输出结果为
CF.INFO
CF.INFO命令查看布谷鸟过滤器信息
不存在会报错
CF.INSERT
CF.INSERT创建一个布谷鸟过滤器,并添加元素
CF.INSERT key [CAPACITY capacity] [NOCREATE] ITEMS item [item ...]
执行命令
CF.INSERT qq CAPACITY 1000 ITEMS hello hello1 hello2
输出结果为
不存在则会创建
CF.INSERTNX
CF.INSERTNX不存在则添加
CF.INSERTNX key [CAPACITY capacity] [NOCREATE] ITEMS item [item ...]
执行
CF.INSERTNX qq1 CAPACITY 1000 ITEMS hello hello1 hello2 HELLO3
输出结果为
总结
Redis8新增布谷鸟过滤器,现在可以借助Redis工具存,而不用自己写