日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關咨詢
選擇下列產品馬上在線溝通
服務時間:8:30-17:00
你可能遇到了下面的問題
關閉右側工具欄

新聞中心

這里有您想知道的互聯網營銷解決方案
村頭老大爺都能聽的懂的延遲雙刪策略

哈嘍,大家好,我是指北君。今天來給大家介紹一下MySQL與Redis延遲雙刪策略

創(chuàng)新互聯公司是一家專注于成都網站制作、成都網站設計與策劃設計,鉛山網站建設哪家好?創(chuàng)新互聯公司做網站,專注于網站建設10多年,網設計領域的專業(yè)建站公司;建站業(yè)務涵蓋:鉛山等地區(qū)。鉛山做網站價格咨詢:18982081108

背景

在當前環(huán)境下,通常我們會首選redis緩存來減輕我們數據庫訪問壓力。但是也會遇到以下這種情況:大量用戶來訪問我們系統(tǒng),首先會去查詢緩存, 如果緩存中沒有數據,則去查詢數據庫,然后更新數據到緩存中,并且如果數據庫中的數據發(fā)生了改變則需要同步到redis中,同步過程中需要保證 MySQL與redis數據一致性問題,在這個同步過程中出現短暫的數據延遲也是正?,F象,但是最終需要保證mysql與緩存中的一致性。

//我們通常使用redis的邏輯
//通常我們是先查詢reids
String value = RedisUtils.get(key);
if (!StringUtils.isEmpty(value)){
return value;
}
//從數據庫中獲取數據
value = getValueForDb(key);
if (!StringUtils.isEmpty(value)){
RedisUtils.set(key,value);
return value;
}

1、什么是延遲雙刪?

延遲雙刪策略是分布式系統(tǒng)中數據庫存儲和緩存數據保持一致性的常用策略,但它不是強一致。其實不管哪種方案,都避免不了Redis存在臟數據的問題,只能減輕這個問題,要想徹底解決,得要用到同步鎖和對應的業(yè)務邏輯層面解決。

2、為什么要進行延遲雙刪?

一般我們在更新數據庫數據時,需要同步redis中緩存的數據 所以我們一般會給出兩種方案:

  • 第一種方案:先執(zhí)行update操作,再執(zhí)行緩存清除。
  • 第二種方案:先執(zhí)行緩存清除,再執(zhí)行update操作。

但是這兩種方案在并發(fā)請求中容易出現以下問題

  • 第一種方案弊端:當請求1去執(zhí)行數據庫更新操作之后,還沒執(zhí)行緩存清除時,請求2就進來了查詢了緩存,此時緩存中數據還是舊數據,還沒來得機刪除導致數據出現問題,但是當t1執(zhí)行緩存刪除操作之后,后面的請求查詢不到緩存,再到數據中查詢,然后更新到緩存中,這種影響是比較小的
  1. t1線程 先更新db;
  2. t2線程查詢命中緩存 返回舊的數據;
  3. 假設t1線程更新完db,預計5毫秒刪除完緩存key 在5毫秒內  其他線程查詢緩存結果還是為舊的數據,但是 5毫秒后查詢緩存結果是為空,在從新將db最新的結果同步到Redis中。
  4. 一個項目中出現延遲是非常正常的,所以該情況發(fā)生的延遲對業(yè)務的影響其實很小。但是如果發(fā)生了,刪除緩存失敗呢?

1.不斷重試----如果是在http協議接口中 會導致接口響應變慢 調用該接口 會發(fā)生響應超時 2.或者通過mq異步的形式同步

  • 第二種方案弊端:當請求1執(zhí)行清除緩存后,還未執(zhí)行數據更新操作的時,請求2進來查詢到數據庫的舊數據,并寫入了redis,這就導致了數據庫與redis數據不一致問題。
  1. t1線程先刪除緩存;
  2. t2線程讀取緩存為null,同步db數據到緩存中;
  3. t1線程更新db中的數據;
  4. t3線程查詢緩存中數據是舊數據;

3、對于方案處理都有弊端,那么我們需要使用延遲雙刪策略

先進行緩存清除,再執(zhí)行update,最后(延遲N秒)再執(zhí)行緩存清除。進行兩次刪除,且中間需要延遲一段時間

    RedisUtils.del(key);// 先刪除緩存
updateDB(user);// 更新db中的數據
Thread.sleep(N);// 延遲一段時間,在刪除該緩存key
RedisUtils.del(key);// 先刪除緩存

4、需要注意的點

上述中(延遲N秒)的時間要大于一次寫操作的時間。原因:如果延遲時間小于寫入redis的時間,會導致請求1清除了緩存,但是請求2緩存還未寫入的尷尬。。。

5、延遲的時間如何確定?

在業(yè)務程序運行時,統(tǒng)計業(yè)務邏輯執(zhí)行讀數據和寫緩存的操作時間,以此為基礎來進行估算。因為這個方案會在第一次刪除緩存值后,延遲一段時間再次進行刪除,所以稱為“延遲雙刪”。

小結

延遲雙刪策略只是一種同步數據庫與緩存的手段,在系統(tǒng)并發(fā)量不高的情況下可以使用這種方式解決,如果是并發(fā)量高的情況下我們也可以另尋其他解決方案 如:[數據庫和緩存一致性解決方案canal]


文章題目:村頭老大爺都能聽的懂的延遲雙刪策略
網站路徑:http://www.5511xx.com/article/ccsjeee.html