美文网首页
Redis-bloom filter

Redis-bloom filter

作者: zhangsanzhu | 来源:发表于2018-12-29 09:29 被阅读0次

    Redis-bloom filter

    对比

    和hyperloglog相比 bloomfilter占用空间大

    多了contains方法

    优点

    1. 不存储元素本身(某些保密场景也很好用)
    2. 存储空间和插入/查询时间都是On

    缺点

    误算,不能删除元素(因为无法百分百确定元素在不在)

    使用场景

    新闻客户端实现推荐去重;
    查询犯罪历史啥的,还可以保密.

    介绍

    redis4.0 之后支持插件支持布隆过滤器
    支持显示创建布隆过滤器 使用bf.server创建.

    原理

    图 -- 网上随便搜都能在找到

    添加元素的原理

    1. 将要添加的元素给k个hash函数
    2. 得到对应于位数组上的k个位置
    3. 将这k个位置设置成 1

    查询元素原理

    1. 将要查询的元素给k个hash函数
    2. 得到对应数组的k个元素
    3. 如果k个位置中有一个为0,则肯定不在集合中
      4.如果k个位置全部为1,则有可能在集合中

    bf.server 的三个参数:

    默认值; error_rate =0.01 ,initial_size=100;
    key:这个不用说了.
    initial_size: 预计放入的元素数量,实际数量超过这个数量,误判率会上升.
    error_rate:预期的误判率.
    错误率越低,需要的空间越大.

    127.0.0.1:6379> bf.add codehole user1
    (integer) 1
    127.0.0.1:6379> bf.add codehole user2
    (integer) 1
    127.0.0.1:6379> bf.add codehole user3
    (integer) 1
    127.0.0.1:6379> bf.exists codehole user1
    (integer) 1
    127.0.0.1:6379> bf.exists codehole user2
    (integer) 1
    127.0.0.1:6379> bf.exists codehole user3
    (integer) 1
    127.0.0.1:6379> bf.exists codehole user4
    (integer) 0
    127.0.0.1:6379> bf.madd codehole user4 user5 user6
    1) (integer) 1
    2) (integer) 1
    3) (integer) 1
    127.0.0.1:6379> bf.mexists codehole user4 user5 user6 user7
    1) (integer) 1
    2) (integer) 1
    3) (integer) 1
    4) (integer) 0
    

    相关文章

      网友评论

          本文标题:Redis-bloom filter

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