美文网首页Java面试题大汇总
【Java面试题】什么是缓存击穿?如何解决?

【Java面试题】什么是缓存击穿?如何解决?

作者: 逐影随行 | 来源:发表于2021-08-04 10:35 被阅读0次

什么是缓存击穿?如何解决?

什么是缓存击穿

缓存击穿的意思是缓存中没有数据,而数据库中有数据。出现这一情况的原因一般是缓存到期。并且在其这个时候用户访问量很大,导致读缓存没有读到,都去访问数据库,造成数据库压力大。

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;
    }

相关文章

网友评论

    本文标题:【Java面试题】什么是缓存击穿?如何解决?

    本文链接:https://www.haomeiwen.com/subject/jtxuvltx.html