docker安装redis bloom容器
#docker-composer.yaml
version: "3.6" # 确定docker-composer文件的版本
services:
# 代表就是一组服务 - 简单来说一组容器
# server
redis:
# 这个表示服务的名称,课自定义; 注意不是容器名称
image: redislabs/rebloom # 指定容器的镜像文件
container_name: php8_redis6_1 # 这是容器的名称
hostname: php8_redis6_1
restart: always
ports:
# 配置容器与宿主机的端口
- "9805:6379"
networks:
- php8
volumes:
- "/www/study/php/redis/1/redis.conf:/usr/lib/redis/redis.conf"
- "/www/study/php/redis/1/data:/data:rw"
- "/www/study/php/redis/1/logs:/logs:rw"
command: redis-server /usr/lib/redis/redis.conf
networks:
# 自定义网络
php8:
driver: bridge
docker exec -it php8_redis6_1 bash
redis-cli
BF.reserve loginFiter 0.1 100000000 #添加布隆过滤器
bf.add # 添加元素
bf.exists # 查询元素是否存在
bf.madd # 一次添加多个元素
del loginFiter # 删除布隆过滤器
在 redis 中有两个值决定布隆过滤器的准确率:
error_rate:允许布隆过滤器的错误率,这个值越低过滤器的位数组的大小越大,占用空间也就越大。
initial_size:布隆过滤器可以储存的元素个数,当实际存储的元素个数超过这个值之后,过滤器的准确率会下降。
BF.reserve loginFiter 0.1 100000000 # 设置error_rate 与 initial_size的值,
BF.reserve 第一个值是过滤器的名字,第二个值为 error_rate 的值,第三个值为 initial_size 的值
在php中使用redis bloom
<?php
#简单示例
$redis = new \Redis();
$redis->connect('127.0.0.1', 6379);
//先看看布隆过滤器中验证数据是否存在, 如果布隆过滤器说没有,那就肯定没有
$re = $redis->rawCommand('bf.exists', 'loginFiter', '登录用户名');
if($re == 0){
die("用户不存在");
}
//这里再进入登录流程
在php框架中使用redis布隆过滤器
安装 PHPRedis 扩展,或者使用 composer 安装 predis/predis 包
.dev文件配置redis
REDIS_HOST=192.168.31.22
REDIS_PASSWORD=redis123
REDIS_PORT=9805
REDIS_PREFIX=biny_
<?php
# 新建一个过滤器,已存在会报错error
echo Redis::rawCommand('BF.RESERVE', 'loginFilter', 0.1, 1000000);
# 向过滤器中添加元素
echo Redis::rawCommand('BF.ADD', 'loginFilter', '58040087'); # 成功返回 1
# 判断元素是否在过滤器中
echo Redis::rawCommand('BF.EXISTS', 'loginFilter', '58040087'); # 存在返回 1
echo Redis::rawCommand('BF.EXISTS', 'loginFilter', '58040088'); # 不存在返回 0