緩存穿透 緩存雪崩 緩存擊穿

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

  

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章