• 解决缓存击穿问题


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

    }

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

  • 相关阅读:
    Java栈、堆、方法区
    Java冒泡算法
    JDK8 API下载
    java 对两个整数变量的值进行互换。三种方法
    Java中double相减精度的问题,和解决方法
    window.onload问题
    ES6中class详解
    YOLO V2
    YOLO V1
    ORB-SLAM2源码解析
  • 原文地址:https://www.cnblogs.com/xubiao/p/7784826.html
Copyright © 2020-2023  润新知