zoukankan      html  css  js  c++  java
  • 解决缓存击穿问题

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

    }

    这样就完美解决了缓存击穿问题。

  • 相关阅读:
    react-redux
    Vue中常用的UI框架
    vue中router与route的区别
    H5新增input属性
    H5新增的input类型
    菜鸡对作用域链的理解
    自己对路由的一些理解
    浏览器缓存
    黄瓜的不定期更新面试题
    ajax封装
  • 原文地址:https://www.cnblogs.com/xubiao/p/7784826.html
Copyright © 2011-2022 走看看