欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

redis延遲雙刪策略示例講解

 更新時間:2023年04月14日 11:24:14   作者:每一天,為明天,go  
延遲是指當前請求邏輯處理延時,而不是當前線程或進程睡眠延遲,下面這篇文章主要給大家介紹了關于redis延遲雙刪策略的相關資料,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下

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

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

1、什么是延遲雙刪?

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

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

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

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

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

第一種方案弊端:當請求1去執(zhí)行數(shù)據(jù)庫更新操作之后,還沒執(zhí)行緩存清除時,請求2就進來了查詢了緩存,此時緩存中數(shù)據(jù)還是舊數(shù)據(jù),還沒來得機刪除導致數(shù)據(jù)出現(xiàn)問題,但是當t1執(zhí)行緩存刪除操作之后,后面的請求查詢不到緩存,再到數(shù)據(jù)中查詢,然后更新到緩存中,這種影響是比較小的

  1. t1線程 先更新db;
  2. t2線程查詢命中緩存 返回舊的數(shù)據(jù);
  3. 假設t1線程更新完db,預計5毫秒刪除完緩存key 在5毫秒內(nèi) 其他線程查詢緩存結果還是為舊的數(shù)據(jù),但是 5毫秒后查詢緩存結果是為空,在從新將db最新的結果同步到Redis中。
  4. 一個項目中出現(xiàn)延遲是非常正常的,所以該情況發(fā)生的延遲對業(yè)務的影響其實很小。但是如果發(fā)生了,刪除緩存失敗呢?

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

第二種方案弊端:當請求1執(zhí)行清除緩存后,還未執(zhí)行數(shù)據(jù)更新操作的時,請求2進來查詢到數(shù)據(jù)庫的舊數(shù)據(jù),并寫入了redis,這就導致了數(shù)據(jù)庫與redis數(shù)據(jù)不一致問題。

  • t1線程先刪除緩存;
  • t2線程讀取緩存為null,同步db數(shù)據(jù)到緩存中;
  • t1線程更新db中的數(shù)據(jù);
  • t3線程查詢緩存中數(shù)據(jù)是舊數(shù)據(jù);

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

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

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

4、需要注意的點

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

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

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

小結

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

到此這篇關于redis延遲雙刪策略的文章就介紹到這了,更多相關redis延遲雙刪策略內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • Windows安裝Redis并添加本地自啟動服務的實例詳解

    Windows安裝Redis并添加本地自啟動服務的實例詳解

    這篇文章主要介紹了Windows安裝Redis并添加本地自啟動服務的實例詳解,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-11-11
  • 詳解如何清理redis集群的所有數(shù)據(jù)

    詳解如何清理redis集群的所有數(shù)據(jù)

    這篇文章主要介紹了詳解如何清理redis集群的所有數(shù)據(jù),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2021-02-02
  • Redis秒殺實現(xiàn)方案講解

    Redis秒殺實現(xiàn)方案講解

    這篇文章主要介紹了Redis秒殺實現(xiàn)方案,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習吧
    2022-12-12
  • 在K8s上部署Redis集群的方法步驟

    在K8s上部署Redis集群的方法步驟

    這篇文章主要介紹了在K8s上部署Redis集群的方法步驟,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2021-04-04
  • Redis 中的布隆過濾器的實現(xiàn)

    Redis 中的布隆過濾器的實現(xiàn)

    這篇文章主要介紹了Redis 中的布隆過濾器的實現(xiàn),詳細的介紹了什么是布隆過濾器以及如何實現(xiàn),非常具有實用價值,需要的朋友可以參考下
    2018-10-10
  • windows下使用redis requirepass認證不起作用的解決方法

    windows下使用redis requirepass認證不起作用的解決方法

    今天小編就為大家分享一篇windows下使用redis requirepass認證不起作用的解決方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-05-05
  • Redis?key的過期時間和永久有效的實現(xiàn)

    Redis?key的過期時間和永久有效的實現(xiàn)

    在Redis中,鍵可以設置過期時間或被永久保存,`EXPIRE`和`PEXPIRE`命令分別用于設置鍵的過期時間,具有一定的參考價值,感興趣的可以了解一下
    2024-09-09
  • Redis中三種特殊數(shù)據(jù)類型命令詳解

    Redis中三種特殊數(shù)據(jù)類型命令詳解

    Geospatial是地理位置類型,我們可以用來查詢附近的人、計算兩人之間的距離等,這篇文章主要介紹了Redis中三種特殊數(shù)據(jù)類型命令詳解,需要的朋友可以參考下
    2024-05-05
  • 如何利用 Redis 實現(xiàn)接口頻次限制

    如何利用 Redis 實現(xiàn)接口頻次限制

    這篇文章主要介紹了如何利用 Redis 實現(xiàn)接口頻次限制,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-02-02
  • Redis解決庫存超賣問題實例講解

    Redis解決庫存超賣問題實例講解

    這篇文章主要介紹了Redis解決庫存超賣問題實例講解,問題和解決辦法都列舉了出來,很貼合實際開發(fā)場景,有需要的同學可以學習下
    2021-03-03

最新評論