社区
其他技术讨论专区
帖子详情
布隆过滤器是如何解决缓存穿透问题的
weixin_38066328
2019-08-20 01:21:36
请问布隆过滤器(Bloom Filter)是如何解决缓存穿透(cache penetration)问题的?
...全文
322
2
打赏
收藏
布隆过滤器是如何解决缓存穿透问题的
请问布隆过滤器(Bloom Filter)是如何解决缓存穿透(cache penetration)问题的?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
2 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
weixin_38092066
2019-08-20
打赏
举报
回复
实际项目上没用过,应该是构造一个布隆过滤器放入存储层全部数据,如果缓存找不到过下布隆过滤器,没查到那一定不存在在存储层,查到再去存储层查。但是没办法删除数据这个不好解决,估计使用场景也有限吧。
weixin_38088019
2019-08-20
打赏
举报
回复
缓存穿透应该是 当数据库中没有某个key对应的value时,缓存中也不会有该value的缓存。所以大量的对该value的查询该的请求会绕过缓存,直接查询数据库。 缓存中一般存的是 key+value ,但是布隆过滤器却可以告诉你 key 对应的value在数据库中存不存在,如果不存在就不用查询数据库了。 拿redis为例子: 请注意,用 redis 也可以做到判断 key 对应的value 在数据库中存不在,那就是把数据库里的所有value对应的key都储存在redis 中,而value可以为空,然后判断下key.IsExists()就可以了,但是这无疑会浪费大量空间,因为存储了数据库中所有的key。而且这也不符合缓存的初衷:咱不能暴力的把所有key都存下来,而是查询了啥key,我们缓存啥key。 而布隆过滤器是一种非常高效的数据结构,把所有数据库的value对应的key 存储到布隆过滤器里,几乎不消耗什么空间,而且查询也是相当的快!但是请注意,它只能判断 key 是否存在(而且会有一定的误差)。 所以一个查询先通过布隆顾虑器判断key是否存在(key 对应的value是否存在数据库中),如果不存在直接返回空就好了。 那么布隆过滤器是怎么做到几乎不消耗空间来储存所有的key,并快速判断特定的key是否存在呢? 其实原理很简单,布隆过滤器 只是一个 byte数组,再加上几个映射函数。 每个key 都通过一系列映射函数,得到一系列的的值k,然后在这个byte数组上的把k下标的值变成1。 当要判断key是否存在时,通过映射函数映射得到的一系列k,查看byte数组相应下标k对应的值是否为1,如果有一个不为1,那么一定不存在。如果都是1 ,那么可能存在。为什么可能而不是一定呢?因为这是一个误差问题,有可能别的key把某个k的位置变成了1,key越多时,误差越大。但是放心不会很大的,这是可以控制的,byte数组越长,误差越小。
布隆过滤器
解决
缓存穿透
问题
博客围绕
布隆过滤器
展开,介绍其用于
解决
缓存穿透
问题
。
缓存穿透
会使数据库崩溃,
布隆过滤器
利用位图和哈希函数判断元素是否存在,虽有一定误判率,但能在海量数据中快速判断。谷歌Guava提供了现成工具,还适用于爬虫、邮箱服务器等场景。
【SpringBoot篇】基于
布隆过滤器
,缓存空值,
解决
缓存穿透
问题
(商铺查询时可用)
文章探讨了
缓存穿透
现象,介绍了如何通过缓存空值处理和
布隆过滤器
来
解决
此
问题
,以及各自的优缺点。
布隆过滤器
以其高效性和空间效率适用于大规模数据场景,但存在误判风险。
彻底理解
布隆过滤器
怎么
解决
缓存穿透
问题
博客围绕Redis
缓存穿透
问题
展开,介绍了业务背景下该
问题
的产生原因。阐述了BitMaps这一Redis高级数据结构,引出
布隆过滤器
,分析其原理、误判
问题
及优化方案。给出利用
布隆过滤器
解决
缓存击穿的流程,还包含代码实现示例,强调其能提升系统性能和稳定性。
基于
布隆过滤器
解决
缓存穿透
问题
本文介绍了
缓存穿透
产生的背景及其
解决
方案,包括接口限流和将空值存入缓存。然后详细阐述了
布隆过滤器
的基本原理,并通过Java代码展示了如何使用Guava实现
布隆过滤器
。
布隆过滤器
被用于
解决
缓存穿透
问题
,通过预加载数据到过滤器中,减少无效数据库查询。同时,文章也提到了
布隆过滤器
在防止Redis击穿
问题
上的应用,通过过滤器拦截无效请求,保护数据库。然而,
布隆过滤器
存在的误判
问题
也进行了讨论。
布隆过滤器
详解及使用:
解决
缓存穿透
问题
本文介绍
布隆过滤器
,它是空间效率高的概率型数据结构,通过多个哈希函数将元素映射到位数组。虽有一定误判率,但可控制。还阐述了
缓存穿透
问题
的原因和危害,重点说明用
布隆过滤器
解决
该
问题
的步骤、示例代码及优化建议,能减轻数据库压力,提升系统性能。
其他技术讨论专区
479
社区成员
790,919
社区内容
发帖
与我相关
我的任务
其他技术讨论专区
其他技术讨论专区
复制链接
扫一扫
分享
社区描述
其他技术讨论专区
其他
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章