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

    }

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

  • 相关阅读:
    video 自动循环播放
    C. Kefa and Park
    B. Random Teams(数学题)
    B. Books(水题)
    dd爱科学1.0(牛客)
    B. WeirdSort
    B. The Cake Is a Lie
    优先队列 priority_queue
    C. A-B Palindrome
    B. Fedor and New Game(位运算)
  • 原文地址:https://www.cnblogs.com/xubiao/p/7784826.html
Copyright © 2011-2022 走看看