布隆过滤器
- 用途:解决redis缓存穿透的问题----缓存击穿和缓存雪崩都是缓存穿透的特殊体现。
- 依赖:
<!--布隆过滤器--> <dependency> <groupId>com.google.guava</groupId> <artifactId>guava</artifactId> <version>22.0</version> </dependency>
- 测试代码:
public static void main(String[] args) { BloomFilter<Integer> filter = BloomFilter.create(Funnels.integerFunnel(), 5000, 0.01); // 往过滤器中塞入数据 filter.put(1); filter.put(2); filter.put(3); // 判断某一数据是否存在 boolean mightContain = filter.mightContain(1); // mightContain = true 存在 System.out.println(mightContain); }
- 特点:
布隆过滤器标识
存在的数据,不一定存在
不存在的数据,一定不存在
以空间换取得来的
就是一个Byte数组 - 项目中实现:
将数据库返回的数据存储到布隆过滤器中,前端请求的时候先走过滤器判定,替数据库阻挡一些拦截,减少数据库的请求压力。
理论上数组大小越大越好,但是也要考虑实际的项目数据量,避免过大的内存空间占用率。
本文来自博客园,作者:土木转行的人才,转载请注明原文链接