什么是缓存击穿?如何解决?
什么是缓存击穿
缓存击穿的意思是缓存中没有数据,而数据库中有数据。出现这一情况的原因一般是缓存到期。并且在其这个时候用户访问量很大,导致读缓存没有读到,都去访问数据库,造成数据库压力大。
image.png
解决方案
- 设置热点数据永远不过期。
- 分级缓存
- 加锁
加锁方式解决缓存击穿伪代码
//实现原理:只允许一个线程去访问数据库
static Object lock = new Object();
public List<String> getData02() {
List<String> result = new ArrayList<String>();
// 从缓存读取数据
result = getDataFromCache();
if (result.isEmpty()) {
synchronized (lock) {
// 从数据库查询数据
result = getDataFromDB();
// 将查询到的数据写入缓存
setDataToCache(result);
}
}
return result;
}