• webmin
    2022-03-05
    “我们提到了布隆过滤器清除状态比较困难,但有些缓存数据是有生命周期的,比如一周或者一个月之后就大概率过期了,你有没有什么好办法可以帮助我们更好地清理过期数据呢?” 每过一定的周期就建立一个新的布隆过滤器B,和原有的布隆过滤器A保持双写,再过一段时间后,A与B的指代交换,然后删除A。

    作者回复: 哈哈哈 标准答案~

    共 2 条评论
    9
  • 那时刻
    2022-03-03
    为了应对缓存数据过期,可以采用定期重建bloom filter的方法,比如数据一周过期,bloom filter可以在一周多之后重建,去掉过期数据信息。

    作者回复: 没错,就是这样做的~

    
    2
  • peter
    2022-03-03
    请教老师两个问题: Q1:布隆过滤器需要提前“预热”吗? 布隆过滤器使用之前,需要先把各个位都设置值吗? 还是在使用过程中进行设置? Q2:处理流程上是先经过布隆过滤器吗? 请求到来之后,原来是先到redis;现在是需要 先到布隆过滤器吗?

    作者回复: Q1 我理解直接在使用过程中采用布隆过滤器即可 Q2 我们是可以采用布隆过滤器解决redis缓存穿透问题的;事实上某些云厂商提供的redis公有云版本就带有增强的布隆过滤器的能力。

    
    1
  • Paul Shan
    2022-03-03
    要删除已经存储在布隆过滤器的内容依据过滤器本身的信息是不够的,一个可能的方案是存储额外累加次数到数据库,类似于{index,number}, index 是对应位的下标,number是额外的累加次数。当布隆过滤器的一位已经是1的时候再次被设置为1的时候,做{index,++number}操作。当删除一个id的时候,首先做{index,--number}操作,如果对应的number已经是0的情况下,就把布隆过滤器相应的位设置成0.

    作者回复: 是的 也是一种解决的方案 不过个人认为代价比较高 可以采用定期重建替换布隆过滤器的方式

    
    1
  • 雨落~紫竹
    2022-07-18
    这种恶意访问的小可爱 直接从源头 把它ip 用户身份 通过(单位时间内请求次数 返回相同失败) 识别出来 拉黑 限流 过一段时间或者联系客服再把他放出来 现在你这种方案其实可以归位保底
    
    1
  • 加油加油
    2022-07-19
    100w 的数据量,如果希望通过 5 次 Hash 得到 5% 以内的误判率,我们大概需要 700 万位 Bitmap,内存只需要不到 1M 即可完成 -- 这个结论中说需要700万位,那是不是对应的哈希函数结果位数也要能达到这个级别?
    
    