高并发系统一定要考虑的 Bloom Filter 布隆过滤器
开篇思考 你能想到哪些方式判断一个元素是否存在集合中? 布隆过滤器并不存储数据本身,那么是怎么做到过滤的? 布隆过滤器实现?参数配置? 一般我们用来判断一个元素是否存在,会想到用 List,Map,Set 等,会将元素先保存下来,然后进行筛选。 但是这样的形式都有一个弊端就是一定要保存数据才行,可是我们仅仅想知道是否存在数据,并不要求获取实际数据,这时候就会觉得这种方式实在是浪费空间。 什么情况下我们只需要判断是否存在这个元素呢? 在系统设计的时候,我们会考虑大量并发的形式,但是很多请求可能是在访问不存在的数据,那么我们就没有必要继续这个请求,可以在 API 网关层就直接过滤掉。 Bloom Filter 布隆过滤器原理 Bloom filter 是由 Howard Bloom 在 1970 年提出的二进制向量数据结构,它具有很好的空间和时间效率,被用来检测一个元素是不是集合中的一个成员。 布隆过滤器实现是不保存数据本身,而是通过 K 个 hash 函数来计算在 byte[] 数组中的存放位置,并把这个位置的值设置为 1, 而这个 K 到底是多少个呢,要根据公式来算出,待会列出。 除了...
