BloomFilter布隆过滤器的实现解决缓存击穿问题

缓存击穿可能导致数据库压力过大,解决方案包括在缓存中存储null值或使用BloomFilter。BloomFilter是一个高效的数据结构,用于判断元素是否在一个集合中,即使存在误判,但不会遗漏任何真实存在的元素。适用于大量数据的去重和快速判断,如URL检查、垃圾邮件过滤等。通过多哈希函数将数据映射到bit数组,占用空间小且判断效率高。
摘要由CSDN通过智能技术生成

什么是缓存的击穿
缓存穿透是指缓存和数据库中都没有的数据,缓存每次都无法命中,因为我们默认不会缓存null 值,导致用户访问 id=-1 这样的数据时,一直都无法命中,这时的用户很可能是攻击者,攻击会导致数据库压力过大。
解决方法:
A.在redis缓存null, 当它再次查询id = -i ,在缓存里面有值,可以不在访问数据库
但是缺点缓存了null 值
B.使用BloomFilter
Bloom Filter是一个占用空间很小、效率很高的随机数据结构,它由一个bit数组和一组Hash算法构成。可用于判断一个元素是否在一个集合中,查询效率很高(1-N,最优能逼近于1)。
在很多场景下,我们都需要一个能迅速判断一个元素是否在一个集合中
1.判断500w条(url)里面是否包含一个url地址;
2.从数十亿个垃圾邮件列表中判断某邮箱是否垃圾邮箱;
3.将已存在的缓存放到布隆中,当黑客访问不存在的缓存时迅速返回避免缓存及DB挂掉

用户访问,先经过一个集合,集合里面有所有的数据标识,当集合里面有标识,代表数据库里面也有标识(判断一个数据在集合里面有没有)
a.当集合里面有,缓存里面有,返回缓存的值
b.缓存里面没有,查询数据库。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值