Redis 扩展模块 -- RedisBloom
摘要
- 本文介绍 Redis 扩展模块 – RedisBloom 的使用方法
- 本文基于
redis-7.4.7,springboot-3.5.8 - Redis官网:https://redis.io/
- Redis 命令文档:https://redis.io/docs/latest/commands/
- 本文仅为学习原理,生产环境推荐使用 Redisson的布隆过滤器 吧。
RedisBloom 简介
-
RedisBloom 是 Redis 官方维护的一个扩展模块,隶属于
Redis Stack,专门用于提供概率型数据结构(Probabilistic Data Structures)的高性能实现。 -
它通过牺牲一定的精确性,换取极低的内存占用和极高的吞吐能力,非常适合海量数据场景下的“存在性判断”和“近似统计”。
-
该模块以
Redis Module方式加载,可无缝集成到现有 Redis 实例中。 -
Redis8+,RedisBloom 已经内置在 Redis 中,不需要单独安装。
RedisBloom 提供的核心数据结构
-
1️⃣ Bloom Filter(布隆过滤器)
- 判断某个元素“可能存在 / 一定不存在”,但不存储元素本身,也不支持删除
- 维基百科对 Bloom Filter 的描述
- 对应Redis命令:
BF.xxx
-
2️⃣ Cuckoo Filter(布谷鸟过滤器)
- Bloom Filter 的增强版,支持 删除元素
- 对应Redis命令:
CF.xxx
-
3️⃣ Count-Min Sketch(CMS)
- 近似统计元素出现频率
- 对应Redis命令:
CMS.xxx
-
4️⃣ Top-K
- 统计访问频率最高的 K 个元素
- 对应Redis命令:
TOPK.xxx
安装 RedisBloom
安装时需要科学上网,主要是安装依赖时需要从海外网下载,如果要部署在国内服务器,可能会连接失败。
可以在海外的相同配置的服务器上进行编译,之后将编译好的redisbloom.so上传到国内服务器即可。
1 | mkdir -p /usr/local/soft/modules/ |
./sbin/setup 报错
- 本人使用的是 Amazon Linux 2023(内核 6.1),即
EL9,相当于CentOS 9,所以第一次运行会报错,大致报错信息如下:
1 | ./sbin/setup |
Redis 启用模块
-
将生成的 redisbloom.so 拷贝到 redis 的 modules 目录下(非必须)
1 | cp /usr/local/soft/modules/RedisBloom/bin/linux-x64-release/redisbloom.so /usr/local/soft/redis-7.4.7/modules/redisbloom.so |
-
Redis 启用模块有三种方法
1 | # 1.将 redisbloom.so 添加到 redis.conf 中,需要重启 redis |
| 加载方式 | 是否持久 |
|---|---|
MODULE LOAD(redis-cli) |
❌ 仅当前进程 |
命令行 redis-server --loadmodule |
❌ 仅本次启动 |
redis.conf 中 loadmodule |
✅ 永久生效 (推荐/生产) |
-
本文采用
loadmodule加载模块
1 | # 将 redisbloom.so 添加到 redis.conf 中,需要重启 redis |
测试BF命令
1 | # 初始化一个BloomFilter,错误率0.01,元素数量1000 |
SpringBoot 集成
-
SpringBoot 的 RedisTemplate 中没有提供对
RedisBloom的封装,需要自己封装,我这里封装了一个简易的RedisBloomService
1 | package com.example.bloomfilter; |