美文网首页
redis-安装布隆过滤器插件及PHP调用

redis-安装布隆过滤器插件及PHP调用

作者: _不想翻身的咸鱼 | 来源:发表于2021-03-30 14:20 被阅读0次

    redis-安装布隆过滤器插件及PHP调用

    redis >= 4.0
    手册:https://oss.redislabs.com/redisbloom/

    Linux下安装redis的BloomFilter插件

    cd /usr/local
    wget https://github.com/RedisBloom/RedisBloom/archive/v1.1.1.tar.gz
    tar -zxf v1.1.1.tar.gz
    cd RedisBloom-1.1.1
    make
    ls
    pwd
    
    

    给redis添加扩展

    vi /usr/local/redis-4.0.14/redis.conf
        ##################### MODULES #################### 
         
        loadmodule /usr/local/RedisBloom-1.1.1/rebloom.so INITIAL_SIZE 10000000 ERROR_RATE 0.0001
    
    后台启动
    ./src/redis-server redis.conf
    
    或者
    ./src/redis-server redis.conf --loadmodule /usr/local/RedisBloom-1.1.1/rebloom.so INITIAL_SIZE 10000000 ERROR_RATE 0.0001
    
    netstat -lntp
    

    新建过滤器:

    BF.RESERVE {key} {error_rate} {size}
    bf.reserve books 0.001 10000
    #error_rate指容错率,取值范围为(0,1),数值越小,占用内存越大,操作时占用cpu资源 越大。
    #Size指过滤器的容量,添加的条目数超过此数字后,性能将开始下降。实际降级将取决 于超出限制的程度。随着条目数呈指数增长,性能将呈线性下降。
    #如果不通过该命令来新建过滤器,bf.add添加值时会自动创建过滤器,但会使用默认的容量与容错率。
    

    添加过滤器与值:

    BF.ADD {newFilter} {foo}
    
    

    如果过滤器不存在,则会自动创建,使用默认的容量100与容错率0.01。遵循集合的特性,已存在的则添加失败。

    批量添加

    bf.madd users user4 user5 user6 user7
    1
    

    检查过滤器中是否存在值:

    BF.EXISTS {newFilter} {foo}
    1
    

    批量检查

    bf.mexists users user4 user5 user6 user7 user8
    1
    

    过滤器创建后容量和容错率就无法改变了。
    过滤器中的元素没法删掉。

    客户端

    ./src/redis-cli -p 6380
    127.0.0.1:6380> bf.add users user1
    (integer) 1
    127.0.0.1:6380> bf.add users user1
    (integer) 0
    127.0.0.1:6380> BF.EXISTS users user1
    (integer) 1
    127.0.0.1:6380> BF.EXISTS users user2
    (integer) 0
    

    php-redis扩展中有个函数可以调用原始的redis指令:

    $redis = new \Redis();
    $redis->connect('127.0.0.1', 6380);
    $re = $redis->rawCommand('bf.add', 'users', 'user2');
    var_dump($re);
    

    添加:在向redis set值的之后,调用bf.add添加到过滤器。
    检查:在穿过了redis去到Mysql之前,调用bf.exists检查一下,如果不存在。

    布隆过滤器可以用在查询和写入分开的业务模式下,一个业务会把key写入redis和BF,另一个业务来搜索查找这个key。
    如果get和set在同一个地方就不能用BF啦。

    相关文章

      网友评论

          本文标题:redis-安装布隆过滤器插件及PHP调用

          本文链接:https://www.haomeiwen.com/subject/fnfghltx.html