牛哄哄的布隆过滤器,有什么用?
日常开发中 , 大家经常使用缓存 , 但是你知道大型的互联网公司面对高并发流量 , 要注意缓存穿透问题吗?
文章图片
图片来自包图网
本文会介绍布隆过滤器 , 空间换时间 , 以较低的内存空间、高效解决这个问题 。
性能不够 , 缓存来凑
现在的年轻人都喜欢网购 , 没事就逛逛淘宝 , 剁剁手 , 买些自己喜欢的东西 , 释放下工作压力 。 
文章图片
地址:
https://detail.tmall.com/item.htm?id=628993216729上图是一个天猫iPhone12的商品详情页 , id表示商品的编号 。
我们都知道淘宝的访问量是非常高的 , 为了提升系统的吞吐量 , 做了很多性能优化 , 其中非常重要一点是将信息异构到缓存中 。
有句话说的好:性能不够 , 缓存来凑 。 但是 , 使用缓存时 , 我们要关注一个重要问题 , 如果缓存没有命中怎么办?
文章图片
缓存没有命中 , 怎么办?
文章图片
如上图:
我们先查询缓存 , 判断缓存中是否有数据如果有数据 , 直接返回如果缓存为空 , 我们需要再查一次数据库 , 并将数据格式异构化 , 然后预热到缓冲中 , 然后将结果返回注意:步骤③存在风险漏洞 , 如果缓存中数据不存在 , 压力会转嫁给数据库 。 假如被竞争对手利用 , 搞无效请求流量攻击 , 瞬间大量请求打到数据库中 , 对系统性能产生很大影响 , 很容易把数据库打挂 , 这种现象称为缓存穿透 。
那么如何处理缓存穿透?
我们的思路是 , 缓存中能不能判断这个数据库值的存在性 , 如果真的不存在 , 直接返回 , 也避免一次数据库查询 。
由于不存在是个无限边界 , 所以 , 我们采用反向策略 , 将存在的值建立一个高效的检索 。 每次缓存取值时 , 先走一次判空检索 。
简单归纳下 , 这个框架的要求:
快速检索内存空间要非常小经调研 , 我们发现布隆过滤器具备以上两个条件 。
什么是布隆过滤器?
布隆过滤器(BloomFilter)是1970年由布隆提出的 。 它实际上是一个很长的二进制向量和一系列随机映射函数 。
布隆过滤器可以用于检索一个元素是否在一个集合中:
优点:空间效率和查询时间都远远超过一般的算法 。
缺点:有一定的误识别率 , 删除困难 。
布隆过滤器如何构建?
布隆过滤器本质上是一个n位的二进制数组 , 用0和1表示 。 假如我们以商品为例 , 有三件商品 , 商品编码分别为 , id1、id2、id3 。
①首先 , 对id1 , 进行三次哈希 , 并确定其在二进制数组中的位置 。 
文章图片
三次哈希 , 对应的二进制数组下标分别是2、5、8 , 将原始数据从0变为1 。
②对id2 , 进行三次哈希 , 并确定其在二进制数组中的位置 。 
文章图片
【牛哄哄的布隆过滤器,有什么用?】三次哈希 , 对应的二进制数组下标分别是2、7、98 , 将原始数据从0变为1 。
下标2 , 之前已经被操作设置成1 , 则本次认为是哈希冲突 , 不需要改动 。
Hash规则:如果在Hash后 , 原始位它是0的话 , 将其从0变为1;如果本身这一位就是1的话 , 则保持不变 。
布隆过滤器如何使用?
- 京东|裁员不忘膈应人,这家互联网大厂送的离职礼物恶心到我了!
- iPhone14|准大学生的数码装备推荐
- 有人觉得中暑就是热出来的,吃一些退烧药就好了,这种做法 蚂蚁庄园今日答案6月28日
- 浮甘瓜于清泉,沉朱李于寒水”描述的是什么场面 蚂蚁庄园今日答案6月28日
- 个头大的车厘子比小樱桃营养价值更高,对吗 蚂蚁新村6月28日答案最新
- 位于广东省阳江市的海陵岛自然资源丰富,景色优美,该岛没有 神奇海洋6月28日答案
- 哪种水果横着切开像星星的形状 蚂蚁庄园今日答案6月29日
- 为验证人类和黑猩猩,是否会产生新的后代,科学家找来5位姑娘!
- 喜马拉雅山出现的“雪人”是何生物?目击者:智商高、攻击性强
- 为什么科学家表示人类“灭绝”的可能性极低?这些理由你赞同吗?
