【Redis】 高级类型与布隆过滤器 原理+场景全解析

张开发
2026/6/8 19:21:35 15 分钟阅读

分享文章

【Redis】 高级类型与布隆过滤器 原理+场景全解析
大家好我是程序员二叉。简介本文详细讲解 Redis 四大高级功能HyperLogLog、Bitmap、Geo、Stream以及面试高频考点布隆过滤器。涵盖底层原理、使用场景、核心区别、实战要点是后端进阶与面试必备干货。欢迎点赞收藏关注。一、HyperLogLog基数统计神器1. 核心作用只做一件事统计一个集合中不重复元素的个数基数统计。例如统计网站 UV、独立访客数、每日活跃设备数。2. 误差范围标准误差率0.81%极小误差。内存占用极小每个 Key 最多占用12KB内存无论统计 1000 条还是 10 亿条数据。3. 优缺点优点内存占用极低、速度极快、支持合并统计。缺点只能统计数量不能获取原始数据存在微小误差。4. 核心命令PFADD key element添加元素PFCOUNT key统计基数5. 适用场景页面UV独立访客统计日活、月活用户数DAU/MAU海量数据去重计数不要求 100% 精确二、Bitmap 位图二进制状态存储1. 底层原理本质是一串连续的二进制数组0 和 1底层基于 String 实现。一个 bit 位代表一个状态极大节省内存。1MB 内存 800 万 bit可以记录 800 万个状态。2. 核心命令SETBIT key offset value设置第 offset 位的值0/1GETBIT key offset获取状态BITCOUNT key统计有多少个 13. 经典场景用户签到Key 设计sign:user:1001:202505Offset日期1~31Value1已签到0未签到优势一个用户一个月仅占用31 bit约4字节。4. 经典场景统计活跃用户Key 设计active:20250501Offset用户 ID统计BITCOUNT算出当日活跃人数。多日统计BITOP做与/或运算算出连续活跃天数。三、Geo 地理位置附近的人/店1. 实现原理底层就是 ZSet有序集合。使用GeoHash 算法将二维经纬度经度、纬度编码成一个分数 score。利用 ZSet 的排序特性实现范围查找。2. 核心命令GEOADD key 经度 纬度 成员添加位置GEODIST key 成员1 成员2计算距离GEORADIUS key 经度 纬度 半径查找附近元素3. 适用场景附近的人、附近的门店外卖配送范围、网约车距离计算同城推荐四、Stream专业消息队列1. 核心原理Redis 5.0 专为消息队列设计的数据结构支持持久化、多消费者、消息回溯、堆积。2. 核心概念消息 ID偏移量格式时间戳-序号如 1712345678900-5。全局唯一、单调递增代表消息的偏移量Offset。消费者通过 ID 确认消费位置防止消息丢失。消费组Consumer Group一个队列可以被多个消费组监听各组互不影响。同一组内消费者负载均衡一条消息只会被组内一个消费者消费。内置待确认列表pending确保消息被成功处理。3. 核心命令XADD生产消息XREADGROUP消费组消费XACK确认消息标记已消费4. 优势消息持久化重启不丢失。支持堆积百万消息无压力。消费组 偏移量实现可靠消息投递。五、Bitmap vs HyperLogLog 核心区别特性BitmapHyperLogLog存储内容存储具体状态0/1只存储统计算法不存原始数据精准度100% 精准有 0.81%误差功能可查单个状态、统计总数只能查总数内存取决于用户量N bit固定 12KB典型场景签到、是否在线、状态标记UV、日活、去重计数一句话总结需要查单个用户状态用Bitmap。只需要统计总人数且省内存用HyperLogLog。六、布隆过滤器Bloom Filter缓存穿透杀手1. 核心原理由一个超大的二进制数组 多个哈希函数组成。添加元素时通过多个 Hash 算法算出多个位置把这些位置置为 1。查询元素时检查这些位置是否全为 1。2. 优缺点优点内存占用极小、查询速度 O(1)、判断存在性高效。缺点有误判率判断存在的可能不存在假阳性。无法删除置 1 容易清零难。3. 误判问题一定会误判但可以通过调大数组、增加 Hash 函数降低误判率。对策允许一定误判容忍小概率错误。误判后请求数据库数据库返回空则直接返回。4. 核心使用场景解决缓存穿透问题大量查询不存在的数据直接打穿到数据库。把数据库已存在的 ID提前放入布隆过滤器。查询时先查过滤器不存在 → 直接返回不放行到数据库。存在 → 再查缓存/数据库。总结HyperLogLog海量数据去重计数省内存有 0.81% 误差。Bitmap状态标记签到/活跃精准存 0/1。Geo基于ZSet GeoHash实现附近位置服务。Stream专业MQ靠偏移量定位消费组负载均衡。布隆过滤器判断不存在绝对准确防缓存穿透神器。

更多文章