seo网站内部优化方案,2017年做网站维护总结,网站布局案例,ppt模板免费模板缓存穿透#xff1a;
查询一个不存在的数据#xff0c;mysql查询不到数据也不会直接写入缓存#xff0c;就会导致每次请求都查数据库。
方法一#xff1a; 方法二#xff1a; 布隆过滤器#xff1a; 简单来说就是一个二进制数组#xff0c;用0和1来判断数组中是否存在…缓存穿透
查询一个不存在的数据mysql查询不到数据也不会直接写入缓存就会导致每次请求都查数据库。
方法一 方法二 布隆过滤器 简单来说就是一个二进制数组用0和1来判断数组中是否存在这个元素整体流程如下 将传入的数通过n个哈希函数不一定是三个计算出n个哈希值。 然后在数组中将这n个下标下标与哈希值相等中的数由0转换为1。增 判断数是否存在的方法就是看数组中这n个下标中的数是否为1。查 缺点 删除不便如下图假如数组下标为2的位置被用来储存 你好 和 hello 这两个信息如果想对 你好 进行删除那我也必然会将 hello 也删除掉 误判如下图id为1的数据将下标为1、3、7的数组数据改为了1id为2的数据将下标为9、12、14的数组数据改为了1这时候我们查询id为3的数据通过三个哈希函数计算出的三个哈希值为3、9、12数组中明明没有存过这个数据但是这几个哈希值对应的下标在数组中数据为1过滤器机会误判数组中存在这个数据。 我们可以通过谷歌的Guava工具类来减少误判
import com.google.common.hash.BloomFilter;
import com.google.common.hash.Funnels;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import java.nio.charset.Charset;Configuration
public class BloomFilterConfig {/*** expectedInsertions期望添加的数据个数* fpp期望的误判率期望的误判率越低布隆过滤器计算时间越长* 原因就是fpp越小占用的空间越大同时使用的哈希函数越多出现重复的可能性越小 * return*/Beanpublic BloomFilterString goodsIDBloom(){BloomFilterString filter BloomFilter.create(Funnels.stringFunnel(Charset.forName(utf-8)), 1000,0.00001);return filter;}Beanpublic BloomFilterString orderBloom(){BloomFilterString filter BloomFilter.create(Funnels.stringFunnel(Charset.forName(utf-8)), 1000,0.00001);return filter;}
}