zoukankan      html  css  js  c++  java
  • 缓存穿透 缓存雪崩 缓存击穿

    1.缓存穿透

    是指在缓存未找到数据的时候去查询数据库的机制作用下,若流量大的时候砸到数据库上导致数据库挂掉。

    2.缓存雪崩

    是指缓存的过期时间设在同一时间,若特定时间全部过期,则导致请求全部砸到数据库上,导致数据库挂掉。

    3.缓存击穿

    是指某个热点Key 刚好失效,还没来得loadDb的间隔期 数据库已经挂掉。

    如下使用redis.setnx(互斥)去loadDB,成功了返回,不成功延时重试下。

    public String get(key) {
          String value = redis.get(key);
          if (value == null) { //代表缓存值过期
              //设置3min的超时,防止del操作失败的时候,下次缓存过期一直不能load db
    	     if (redis.setnx(key_mutex, 1, 3 * 60) == 1) {  //SET if Not eXists 不存在的时候 才设置 代表设置成功
                          value = db.get(key);
                          redis.set(key, value, expire_secs);
                          redis.del(key_mutex);
                  } else {  //这个时候代表同时候的其他线程已经load db并回设到缓存了,这时候重试获取缓存值即可
                          sleep(50);
                          get(key);  //重试
                  }
              } else {
                  return value;      
              }
     }
    

      

  • 相关阅读:
    Redis学习之(一)
    SpringMVC之学习(0)
    Node.js之Express三
    Node.js之Express二
    Node.js之Express一
    Node.js进程管理之进程集群
    Node.js进程管理之子进程
    Node.js其他模块
    Node.js进程管理之Process模块
    Node.js HTTP Server对象及GET、POST请求
  • 原文地址:https://www.cnblogs.com/Wilson6/p/9076663.html
Copyright © 2011-2022 走看看