python+redis布隆过滤器

redis

1.docker
docker run -p 6379:6379 -it --rm redis/redis-stack-server:latest
2.手动编译
git clone --recursive https://github.com/RedisBloom/RedisBloom.git
cd RedisBloom
./sbin/setup
make
在redis配置文件中添加
loadmodule /path/to/redisbloom.so
然后启动
redis-server redis.conf

测试代码

import os
from loguru import logger  # 日志相关
import redis


# -------------------------


def test_get_key():
    # 随机从26个字母中选择5个字母
    import random
    import string
    letters = string.ascii_lowercase
    random_letters = ''.join(random.choice(letters) for i in range(2))
    # logger.info("random_letters:{}".format(random_letters))
    return random_letters


# 获取ip
host = os.getenv('REDIS_URL', 'localhost')
# 获取端口
port = os.getenv('REDIS_PORT', 6379)
# 获取密码
password = os.getenv('REDIS_PASSWORD', '')
# 获取db
db = os.getenv('REDIS_DB', 0)
# 创建布隆过滤器
filter_name = os.getenv('REDIS_FILTER_NAME', 'test_filter')
# 错误率
error_rate = os.getenv('REDIS_ERROR_RATE', 0.01)
# 预计插入的元素数量
capacity = os.getenv('REDIS_CAPACITY', 10000)

logger.info(f"redis: {host}:{port}")
logger.info(f"config:过滤器名字{filter_name}错误率{error_rate}预计数量{capacity}")
# 连接到 Redis
r = redis.Redis(host=host, port=port, password=password, db=db, decode_responses=True).bf()

try:
    r.reserve(filter_name, error_rate, capacity)
except Exception as e:
    logger.error(f"过滤器已经存在:{e}")

# 随机添加100个
for i in range(100):
    r.add(filter_name, test_get_key())
# 随机生成100个看是否存在
for i in range(100):
    key = test_get_key()
    if r.exists(filter_name, key):
        logger.info(f"key:{key}存在", key)
    else:
        logger.info(f"key:{key}不存在", key)

# 批量生成100个
keys = [test_get_key() for i in range(100)]
# 批量添加
# r.madd(filter_name, *keys)
# 批量检查
print(r.mexists(filter_name, *keys))

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值