Redis中使用布隆过滤器解决缓存穿透问题
创作时间:
作者:
@小白创作中心
Redis中使用布隆过滤器解决缓存穿透问题
引用
CSDN
1.
https://blog.csdn.net/yuanmomoya/article/details/142022935
缓存穿透(失效)问题
缓存穿透是指查询一个一定不存在的数据,由于缓存中没有命中,会去数据库中查询,而数据库中也没有该数据,并且每次查询都不会命中缓存,从而每次请求都直接打到了数据库上,这会给数据库带来巨大压力。
布隆过滤器原理
布隆过滤器(Bloom Filter)是一种空间效率很高的随机数据结构,它利用多个不同的哈希函数将一个元素映射到一个位数组中的多个位置,并将这些位置的值置为 1。
当查询一个元素时,同样使用这些哈希函数计算出多个位置,如果这些位置上的值都为 1,那么这个元素可能存在;如果有任何一个位置上的值为 0,那么这个元素一定不存在。
布隆过滤器存在一定的误判概率,即可能会把不存在的元素判断为存在,但不会把存在的元素判断为不存在。
使用 Redis 中的布隆过滤器解决缓存穿透问题的代码
引入依赖
<dependency>
<groupId>org.redisson</groupId>
<artifactId>redisson</artifactId>
<version>3.21.1</version>
</dependency>
代码实现
import org.redisson.Redisson;
import org.redisson.api.RBloomFilter;
import org.redisson.api.RedissonClient;
public class BloomFilterCache {
private final RedissonClient redissonClient;
private final RBloomFilter<String> bloomFilter;
public BloomFilterCache() {
redissonClient = Redisson.create();
// 创建布隆过滤器,预计插入 10000 个元素,误判率为 0.01
bloomFilter = redissonClient.getBloomFilter("myBloomFilter");
bloomFilter.tryInit(10000, 0.01);
}
public boolean mightContain(String key) {
return bloomFilter.contains(key);
}
public void add(String key) {
bloomFilter.add(key);
}
public void close() {
redissonClient.shutdown();
}
public static void main(String[] args) {
BloomFilterCache bloomFilterCache = new BloomFilterCache();
// 添加一些可能存在的键
bloomFilterCache.add("key1");
bloomFilterCache.add("key2");
// 查询键是否可能存在
System.out.println(bloomFilterCache.mightContain("key1")); // true
System.out.println(bloomFilterCache.mightContain("key3")); // false
bloomFilterCache.close();
}
}
在上述代码中,首先创建了一个 Redisson 客户端,并初始化了一个布隆过滤器。mightContain 方法用于判断一个键是否可能存在于布隆过滤器中,add 方法用于向布隆过滤器中添加一个键。
使用布隆过滤器可以在缓存之前进行快速判断,减少对数据库的不必要查询,从而有效地解决缓存穿透问题。
缓存失效后的处理策略
- 返回异常信息,业务流程往下走
- 记录对应的日志信息
- 异步缓存key到redis
具体步骤如下:
- 当使用布隆过滤器判断某个 key 不存在时,触发一个异步任务。
- 异步任务从可能的数据来源(如数据库、外部 API 等)获取该 key 对应的数据。
- 如果获取到数据,将其存入缓存(Redis 或其他缓存系统),以便下次查询时能够快速响应。
热门推荐
2025年农历二月出生的八字详解及成长指南
空调冷凝水的成因分析与预防处理方案
传统文化振兴视域下西双版纳傣族竹编技艺在现代家具设计中的运用
乔家大院:24字'六不准'家规,成就百年晋商传奇
物业公司如何开展城市服务设计的思考和剖析
低噪音轴流风扇的降噪音原理
适合室外的水培植物有哪些?养护要点全解析
川藏铁路建成后的利好,在于方便人力和物力西送,在于移民兴市!
平遥古城:留住历史记忆的“活”文物
十二生肖排序表图排位2024年 2024十二生肖排序表图
最适合孕妇的维生素
无主之地3缺少 dx11:实用指南教你轻松解决DirectX 11缺失问题
英国教育体系及其特点
30句描写快乐心情的古诗词,带你感受古人眼中的美好时光
眼科医院的功能分区(详解眼科医院的科室设置)
红木家具市场:传统工艺与现代设计的融合
家用净水器常见问题预防与维护全攻略
美股收盘:纳指抹去今年涨幅 标普指数三连跌
风向变了?纳斯达克大跌超2%!发生了什么?如何应对?
失忆症Amnesia:探索遗忘边缘的深度解析
霸陵遗址:大汉盛世的地下见证
如何选择和推荐附近的牙科诊所,详细指南
USB3.0 vs USB2.0:技术对比与适用场景选择
小伙天天听到“狗挠门声”,原来耳朵里有只超级小虫“跑”得欢
烤箱与微波炉的加热原理及效果全面解析
太原地铁6号线何时建?官方有最新回复了!
长寿是哲学问题,抗衰老是科学问题
探索虚拟地理世界:VR与GIS的完美融合
赛车轨道设计与建设全流程详解
新中医诊疗古法“新”用 贴近群众解病忧