本机环境
- macos 26.4.1 (25E253)
- uname -m : x86_64
- gmake --version : GNU Make 4.4.1
安装 RedisBloom 后:
BF.ADD
BF.EXISTS
BF.RESERVE
CF.ADD
TOPK.ADD
CMS.INCRBY
这些才会出现。RedisBloom 提供 Bloom Filter、Cuckoo Filter、Count-Min Sketch、Top-K 等概率数据结构
本机已有 redis 服务, 通过加载 .so 模块
git clone https://github.com/RedisBloom/RedisBloom.git
cd RedisBloom
make
成功后会生成:redisbloom.so
修改 redis.conf 添加内容:
loadmodule /path/redisbloom.so
重启 Redis
或者使用docker 加载 so
docker run \
-p 6379:6379 \
-v /data/redisbloom.so:/redisbloom.so \
redis \
redis-server \
--loadmodule /redisbloom.so
本机实践
本机是使用brew安装的redis服务
➜ ~ brew info redis
==> redis ↑: 7.2.7 → stable 8.8.0 (bottled), HEAD
➜ ~ brew services list
Name Status User File
redis started morningcat ~/Library/LaunchAgents/homebrew.mxcl.redis.plist
启动服务
brew services start redis
停止服务
brew services stop redis
➜ ~ brew --prefix redis
/usr/local/opt/redis
Homebrew 的 service 默认启动参数在
/usr/local/opt/redis/homebrew.mxcl.redis.plist
<array>
<string>/usr/local/opt/redis/bin/redis-server</string>
<string>/usr/local/etc/redis.conf</string>
</array>
<key>StandardErrorPath</key>
<string>/usr/local/var/log/redis.log</string>
<key>StandardOutPath</key>
<string>/usr/local/var/log/redis.log</string>
所以配置文件是 /usr/local/etc/redis.conf
git clone https://github.com/RedisBloom/RedisBloom.git
cd RedisBloom
git tag | tail -20
git checkout v2.8.9
git submodule update --init --recursive
grep -R "macosx-version-min" -n .
export OSX_MIN_SDK_VER=10.15
➜ ~ gmake clean
➜ ~ gmake
Compiling src/cms.c...
Linking ~/opensource/RedisBloom/bin/macos-x64-release/redisbloom.so...
cp ~/opensource/RedisBloom/bin/macos-x64-release/redisbloom.so ~/opensource/redisbloom.so
vim /usr/local/etc/redis.conf
添加
loadmodule ~/opensource/redisbloom.so
重启服务
brew services restart redis
tail -50 /usr/local/var/log/redis.log
或者直接使用 Redis Stack
方式一 docker
docker run -d \
--name redis-stack \
-p 6379:6379 \
redis/redis-stack-server:latest
docker ps
docker exec -it redis-stack redis-cli
方式二 brew
brew tap redis-stack/redis-stack
brew install redis-stack
brew services start redis-stack-server
brew services list
验证 RedisBloom 是否加载
redis-cli
MODULE LIST
其中 bf 就是 RedisBloom
BF.RESERVE blacklist 0.001 10000000
注释: key: blacklist 误判率: 0.1% 容量: 1000万
BF.ADD user_filter tom
BF.EXISTS user_filter tom
BF.EXISTS user_filter jack
BF.INFO user_filter
BF.MADD user_filter dog jack bob
BF.MEXISTS user_filter tom jack nobody
java 调用
redisTemplate.execute(
connection -> {
return connection.execute(
"BF.ADD",
"blacklist".getBytes(),
"user10086".getBytes()
);
}
);
Redisson 提供布隆过滤器封装
RBloomFilter<String> bloomFilter = redisson.getBloomFilter("user:blacklist");
bloomFilter.tryInit(10000000, 0.001);
bloomFilter.add("user10086");
boolean exists = bloomFilter.contains("user10086");