guava布隆过滤器及cuckoo过滤器

guava布隆过滤器及cuckoo过滤器

文档

  1. redis单机安装
  2. redis集群模式 -集群搭建
  3. 布隆过滤器 -Bloom Filter
  4. springboot整合redisson单机模式
  5. redis实现布隆过滤器

官方文档

  1. 官网操作命令指南页面:https://redis.io/docs/latest/commands/?name=get&group=string
  2. Redis cluster specification

下载地址

  1. 官网:https://redis.io/
  2. 下载列表页面:https://download.redis.io/releases/

说明

  1. 版本选择:redis-7.0.0.tar.gz
  2. 下载地址:https://download.redis.io/releases/redis-7.0.0.tar.gz

guava布隆过滤器

  1. 引入依赖

    xml 复制代码
    <dependency>
        <groupId>com.google.guava</groupId>
        <artifactId>guava</artifactId>
        <version>26.0-jre</version>
    </dependency>
  2. 使用示例

    java 复制代码
    public class GuavaBloomFilterDemo {
    
        public static void main(String[] args) {
            // 预期插入数量 100 万,期望误判率 0.01
            BloomFilter<String> bloomFilter = BloomFilter.create(
                    Funnels.stringFunnel(StandardCharsets.UTF_8),
                    1_000_000,
                    0.01
            );
    
            // 添加
            bloomFilter.put("192.168.1.100");
            bloomFilter.put("10.0.0.1");
    
            // 判断是否存在(可能有误判)
            System.out.println(bloomFilter.mightContain("192.168.1.100"));  // true
            System.out.println(bloomFilter.mightContain("10.0.0.2"));       // 可能 true 或 false
    
            // 预期误判率
            System.out.println(bloomFilter.expectedFpp());  // 约 0.01
            // 近似已插入数量
            System.out.println(bloomFilter.approximateElementCount());
        }
    }
  3. Guava 默认误判率是 0.03,在大多数应用里,3% 误判率是空间效率和准确性的良好平衡。

  4. 创建时指定预期数量,实际插入超过这个数量会导致误判率急剧上升

  5. Guava过滤器不支持删除

cuckoo过滤器

  1. 引入依赖

    xml 复制代码
    <dependency>
        <groupId>com.github.mgunlogson</groupId>
        <artifactId>cuckoofilter4j</artifactId>
        <version>1.0.2</version>
    </dependency>
  2. 使用示例

    java 复制代码
    public class CuckooFilterDemo {
    
        public static void main(String[] args) {
            // 创建:容量 100 万,误判率 1%
            CuckooFilter<String> filter = new CuckooFilter.Builder<String>(
                    Funnels.stringFunnel(StandardCharsets.UTF_8),
                    1_000_000
            ).withFalsePositiveRate(0.01).build();
    
            // 添加
            filter.put("192.168.1.100");
            filter.put("10.0.0.1");
    
            // 判断是否存在
            System.out.println(filter.mightContain("192.168.1.100"));  // true
            System.out.println(filter.mightContain("10.0.0.2"));       // 大概率 false
    
            // 删除(支持删除,Bloom过滤器不支持)
            filter.delete("192.168.1.100");
            System.out.println(filter.mightContain("192.168.1.100"));  // false
        }
    }
  3. cuckoo过滤器支持删除

  4. 相关论文:https://www.cs.cmu.edu/~dga/papers/cuckoo-conext2014.pdf

参考资料

  1. https://www.bilibili.com/video/BV13R4y1v7sP

注意事项

  1. 部分内容由AI生成
  2. 如有不对,欢迎指正!!!
相关推荐
cfm_29142 小时前
Redis五大基本数据结构底层了解
数据结构·数据库·redis
真实的菜3 小时前
Redis 从入门到精通(十二):典型业务场景实战 —— 排行榜、限流器、秒杀系统、Session 共享
数据库·redis·python
x***r1517 小时前
Redis Desktop Manager 0.8.8 安装教程(Windows redis-desktop-manager-0.8.8.384详细步骤)
数据库·windows·redis
无涯大者8 小时前
Redis 实现页面缓存、购物车、登录 token示例、点赞 / 阅读计数,排行榜 示例
redis·缓存
真实的菜9 小时前
Redis 从入门到精通(十三):性能优化与运维实战 —— 慢查询、内存优化、监控与安全
运维·redis·性能优化
Java 码思客12 小时前
【Redis分布式缓存实战】第20章 Redis监控运维与自动化体系
运维·redis·缓存
勇往直前plus13 小时前
Redis&Python 梳理
数据库·redis·python
我是一颗柠檬13 小时前
【Java项目技术亮点】分布式锁实现与优化:从Redisson到ZooKeeper,彻底搞懂分布式锁的底层原理
java·redis·分布式·中间件·java-zookeeper
宁小法14 小时前
Redis evalsha 可能返回的错误类型
redis·php·lua报错
我是一颗柠檬15 小时前
【Redis】Redis面试高频考点汇总Day15(2026年)
数据库·redis·缓存·面试