本机 brew 安装的 redis 如何加载 RedisBloom 模块笔记

0 阅读2分钟

本机环境

  • 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");