布隆过滤器/Bloom Filter - 实现Demo - 学习/实践

1.应用场景

主要用于学习如何实现布隆过滤器,以及现实的方式有哪些,差异本质, 场景是什么。

2.学习/操作

布隆过滤器/Bloom Filter - 实现Demo - 学习/实践_第1张图片

1.文档阅读

15 | 缓存的使用姿势(三):缓存穿透了怎么办?-极客时间

25 | 缓存异常(上):如何解决缓存和数据库的数据不一致问题?-极客时间

26 | 缓存异常(下):如何解决缓存雪崩、击穿、穿透难题?-极客时间

2.整理输出

临时插入

Katio: 另一个经常使用的是基于Redis实现的布隆过滤器,其底层实现利用的是String数据结构和位运算,可以解决业务层缓存穿透的问题,而且内存占用非常小,操作非常高效。
        

楼主Redis实现的布隆过滤器具体方案能讲一下吗
Redis官网,module模块有布隆过滤器的具体实现和使用。
还有布隆过滤器和topk等都在一个插件了,redisbloom

后续补充

...

3.问题/补充

1. 网友-kaito

关于布隆过滤器的使用,还有几点和大家分享。

1、布隆过滤器会有误判:由于采用固定bit的数组,使用多个哈希函数映射到多个bit上,有可能会导致两个不同的值都映射到相同的一组bit上。虽然有误判,但对于业务没有影响,无非就是还存在一些穿透而已,但整体上已经过滤了大多数无效穿透请求。

2、布隆过滤器误判率和空间使用的计算:误判本质是因为哈希冲突,降低误判的方法是增加哈希函数 + 扩大整个bit数组的长度,但增加哈希函数意味着影响性能,扩大数组长度意味着空间占用变大,所以使用布隆过滤器,需要在误判率和性能、空间作一个平衡,具体的误判率是有一个计算公式可以推导出来的(比较复杂)。但我们在使用开源的布隆过滤器时比较简单,通常会提供2个参数:预估存入的数据量大小、要求的误判率,输入这些参数后,布隆过滤器会有自动计算出最佳的哈希函数数量和数组占用的空间大小,直接使用即可。

3、布隆过滤器可以放在缓存和数据库的最前面:把Redis当作布隆过滤器时(4.0提供了布隆过滤器模块,4.0以下需要引入第三方库),当用户产生业务数据写入缓存和数据库后,同时也写入布隆过滤器,之后当用户访问自己的业务数据时,先检查布隆过滤器,如果过滤器不存在,就不需要查询缓存和数据库了,可以同时降低缓存和数据库的压力。

4、Redis实现的布隆过滤器bigkey问题:Redis布隆过滤器是使用String类型实现的,存储的方式是一个bigkey,建议使用时单独部署一个实例,专门存放布隆过滤器的数据,不要和业务数据混用,否则在集群环境下,数据迁移时会导致Redis阻塞问题。

网友补充

君哥聊技术: 恶意攻击的情况我觉得可以在网关进行判断和拦截,就不用让它到业务系统了

Kaito>君哥聊技术

是的,最好在最前面拦截。

网关服务和业务服务分别独立的,通过网关后才会调用业务系统。

4.参考

15 | 缓存的使用姿势(三):缓存穿透了怎么办?-极客时间

后续补充

...

你可能感兴趣的:(布隆过滤器,Bloom,Filter,缓存穿透)