JAVA全系列 教程
3762个小节阅读:7091.2k
目录
C语言快速入门
JAVA全系列 教程
面向对象的程序设计语言
Python全系列 教程
Python3.x版本,未来主流的版本
人工智能 教程
顺势而为,AI创新未来
大厂算法 教程
算法,程序员自我提升必经之路
C++ 教程
一门通用计算机编程语言
微服务 教程
目前业界流行的框架组合
web前端全系列 教程
通向WEB技术世界的钥匙
大数据全系列 教程
站在云端操控万千数据
AIGC全能工具班
A A
White Night
某一个热点 key,在缓存过期的一瞬间,同时有大量的请求打进来,由于此时缓存过期了,所以请求最终都会走到数据库,造成瞬时数据库请求量大、压力骤增,甚至可能打垮数据库。
xxxxxxxxxx
public String get(String key) throws InterruptedException {
String value = jedis.get(key);
// 缓存过期
if (value == null){
// 设置3分钟超时,防止删除操作失败的时候 下一次缓存不能load db
Long setnx = jedis.setnx(key + "mutex", "1");
jedis.pexpire(key + "mutex", 3 * 60);
// 代表设置成功
if (setnx == 1){
// 数据库查询
//value = db.get(key);
//保存缓存
jedis.setex(key,3*60,"");
jedis.del(key + "mutex");
return value;
}else {
// 这个时候代表同时操作的其他线程已经load db并设置缓存了。 需要重新重新获取缓存
Thread.sleep(50);
// 重试
return get(key);
}
}else {
return value;
}
}
1.Redis技术中缓存击穿指______问题。
A 缓存和数据库中都没有的数据
B 缓存冷启动
C 缓存中没有但数据库中有的数据
D 缓存中数据大批量到过期时间
2.Redis技术中缓存击穿如何解决。
A 对空值缓存
B 搭建Redis高可用
C 使用布隆过滤器
D 加互斥锁
1=>C 2=>D