布隆过滤器实战【防止缓存击穿】

布隆过滤器介绍及实战应用(防止缓存穿透 本文将讲解布隆过滤器的概念、原理、优缺点、使用场景;通过Java使用布隆过滤器,以及在项目中结合Redis使用,贴近实战,干货满满!!! 阅读详情

640?wx_fmt=png

为什么引入

我们的业务中经常会遇到穿库的问题,通常可以通过缓存解决。 如果数据维度比较多,结果数据集合比较大时,缓存的效果就不明显了。 因此为了解决穿库的问题,我们引入Bloom Filter。

适合的场景

  • 数据库防止穿库 Google Bigtable,Apache HBase和Apache Cassandra以及Postgresql 使用BloomFilter来减少不存在的行或列的磁盘查找。避免代价高昂的磁盘查找会大大提高数据库查询操作的性能。 如同一开始的业务场景。如果数据量较大,不方便放在缓存中。需要对请求做拦截防止穿库。

  • 缓存宕机 缓存宕机的场景,使用布隆过滤器会造成一定程度的误判。原因是除了Bloom Filter 本身有误判率,宕机之前的缓存不一定能覆盖到所有DB中的数据,当宕机后用户请求了一个以前从未请求的数据,这个时候就会产生误判。当然,缓存宕机时使用布隆过滤器作为应急的方式,这种情况应该也是可以忍受的。

  • WEB拦截器 相同请求拦截防止被攻击。用户第一次请求,将请求参数放入BloomFilter中,当第二次请求时,先判断请求参数是否被BloomFilter命中。可以提高缓存命中率

  • 恶意地址检测 chrome 浏览器检查是否是恶意地址。 首先针对本地BloomFilter检查任何URL,并且仅当BloomFilter返回肯定结果时才对所执行的URL进行全面检查(并且用户警告,如果它也返回肯定结果)。

  • 比特币加速 bitcoin 使用BloomFilter来加速钱包同步。

开源项目地址:https://github.com/luw2007/bloomfilter

我们先看看一般业务缓存流程: 640?wx_fmt=png

先查询缓存,缓存不命中再查询数据库。 然后将查询结果放在缓存中即使数据不存在,也需要创建一个缓存,用来防止穿库。这里需要区分一下数据是否存在。 如果数据不存在,缓存时间可以设置相对较短,防止因为主从同步等问题,导致问题被放大。

这个流程中存在薄弱的问题是,当用户量太大时,

Redis中如何使用布隆过滤器解决缓存击穿问题 使用布隆过滤器可以有效地预防 Redis 缓存穿透,提高应用程序的性能和稳定性。同时,使用 Redis 的事务也可以提高应用程序的可靠性和稳定性。在实际应用中,可以根据具体情况选择合适的缓存策略,以提高应用程序的性能和稳定性。 阅读详情

相关推荐

redis缓存穿透之终极解决方案——布隆过滤器

一.介绍与原理 在我们开发过程中,避免不了经常使用到redis这个缓存中间件,尤其是在大并发访问量的时候,他的存在会让我们在对数据库操作时节省很大的性能。 然而当我们进行redis的使用时,难免不了会发生以下这三种redis搞崩数据库的情况:缓存击穿缓存穿透缓存雪崩。而在遇到这几种情况时,我们都要有对应的解决措施去防止他的发生。今天我要记录的就是redis modle中的一种非常实用的解决缓存击穿的利器——布隆过滤器(bloomFilter)。 何为布隆过滤器呢?他的定义的使用定义很简...

qq_40606397的博客 3172

布隆过滤器解决缓存击穿问题

布隆过滤器

hauchun的博客 8253

从原理到实战:如何通过布隆过滤器防止缓存击穿

del self._bf_conn 会调用`pyreBloom`内置的C的del方法,会关闭redis连接 ''' if self._bf_conn: logging.debug('pyreBloom reconnect') del self._bf_conn self._bf_conn = None _ = self.bf_conn。原因是除了Bloom Filter 本身有误判率,宕机之前的缓存不一定能覆盖到所有DB中的数据,当宕机后用户请求了一个以前从未请求的数据,这个时候就会产生误判。

代码界的扛把子 459

【业务场景实战】你知道布隆过滤器怎么用吗?

布隆过滤器是一个非常神奇的数据结构,通过它我们可以非常方便地判断一个给定数据是否存在于海量数据中。我们可以把它看作由二进制向量(或者说位数组)和一系列随机映射函数(哈希函数)两部分组成的数据结构。相比于我们平时常用的 List、Map、Set 等数据结构,它占用空间更少并且效率更高,但是缺点是其返回的结果是概率性的,而不是非常准确的。理论情况下添加到集合中的元素越多,误报的可能性就越大。并且,存放在布隆过滤器的数据不容易删除。

仰望-星空~~的博客 1419

使用布隆过滤器解决缓存穿透

在项目启动的时候,我们的redis就有了数据。我们来看下效果,访问一个不存在的数据。我们在来查询一个存在的数据。

qq_21277357的博客 1640

布隆过滤器深度实战:详解原理、场景与SpringBoot+Redis高性能实现

【全网最硬核布隆过滤器指南】万字长文从哈希碰撞本质出发,深度剖析布隆过滤器的位数组与多哈希函数核心机制,结合Google Guava与Redisson源码解读,手把手教你通过SpringBoot+Redis构建支持动态扩容的工业级布隆过滤器。本文不仅详解误判率公式推导与参数调优方法论,更包含缓存穿透防护、十亿级数据去重等6大真实场景解决方案,最后通过JMeter压测验证过滤器性能,助你掌握这个让数据库查询性能翻倍的核心技术。随文附赠可动态扩容的布隆过滤器SpringBoot工程源码,技术深度与实战价值兼备!

Zyw907155124的博客 2万+

【原创】缓存穿透-布隆过滤器实现

使用布隆过滤器,可以将数据库中的所有唯一主键放入布隆过滤器中。每当需要查询某个关键字时,先查询布隆过滤器。如果查询结果表明该关键字不存在,就可以直接返回查询结果为空。如果查询结果表明该关键字存在,就需要进行数据库的访问,查询具体的数据是否存在,不存在则在返回空。

weixin_42306823的博客 1272

Redis布隆过滤器的原理和应用场景,解决缓存穿透

有,是可能有;无,是肯定无;使用时z,初始化值尽可能满足实际元素长度,避免扩容;当实际元素数量超过初始长度时,应该对布隆过滤器进行重建,再将所有的历史元素批量添加进去;

m0_73311735的博客 639

Redis(五)--详解布隆过滤器缓存穿透解决方案

一、使用场景 1.布隆过滤器的特性是:去重,多数去重场景都...

hayhead的博客 644

布隆过滤器解决缓存穿透

布隆过滤器解决缓存穿透

Erica_java的博客 2910
上一篇: 图解Go语言内存分配
下一篇: 深入Go的底层,带你走近一群有追求的人
codehole_
博客等级 码龄7年 33粉丝 132原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值