解决缓存击穿问题
1、什么叫着缓存击穿?
缓存击穿:就是略过缓存了,直接请求数据库,导致数据库挂了
一般的缓存设计就算下面这种写法:
// 判断缓存key是否存在
if(缓存中存在){
return redis.get(key);
}
// 查询数据库
value = DB.query();
// 保存在缓存
redis.set(key,value);
但是这样会存在一个问题???那就是在多并发的时候,所有请求先判断key都不存在,都跑到DB中来了,所以拖垮数据库了
看我怎么优化呢?双重加锁就可以解决
// 判断缓存key是否存在
if(缓存中存在){
return redis.get(key);
}
synchronized(this){
// 判断缓存key是否存在
if(缓存中存在){
return redis.get(key);
}
// 查询数据库
value = DB.query();
// 保存在缓存
redis.set(key,value);
}
这样就完美解决了缓存击穿问题。
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步