最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Redis 延遲雙刪的實現(xiàn)示例

 更新時間:2026年05月08日 08:25:58   作者:哈里謝頓  
延遲雙刪是在Cache-Aside基礎上,為了解決并發(fā)讀寫導致緩存回填舊值問題而設計的方案,本文就來詳細的介紹一下Redis 延遲雙刪的實現(xiàn)示例,感興趣的可以了解一下

延遲雙刪(Delayed Double Deletion) 是在 Cache-Aside 基礎上,為了解決"并發(fā)讀寫導致緩存回填舊值"問題而設計的方案。

一、問題背景:為什么需要雙刪?

先看單刪的問題場景(先刪緩存,再更新DB):

時間點  線程A(寫)              線程B(讀)
  t1    刪除緩存
  t2                            查詢緩存(未命中)
  t3                            查詢數(shù)據(jù)庫 → 得到舊值
  t4    更新數(shù)據(jù)庫為新值
  t5                            將舊值寫入緩存  ← 緩存變臟!

即使你先更新DB再刪緩存,也有類似風險:

時間點  線程A(寫)              線程B(讀)
  t1    更新數(shù)據(jù)庫
  t2                            查詢數(shù)據(jù)庫 → 得到舊值(因主從延遲等)
  t3    刪除緩存
  t4                            將舊值寫入緩存  ← 緩存變臟!

延遲雙刪的核心思想:等一等,讓并發(fā)的讀請求都結束了,再把緩存清掉。

二、延遲雙刪的具體步驟

1. 先刪除緩存
2. 更新數(shù)據(jù)庫
3. 休眠/等待一段時間(比如 200ms~1s)
4. 再次刪除緩存

用代碼表示:

import time
def update_with_delayed_double_deletion(key, new_value):
    # 第一次刪緩存
    redis.delete(key)
    # 更新數(shù)據(jù)庫
    db.update(key, new_value)
    # 延遲一段時間(關鍵!)
    time.sleep(0.5)  # 500ms,根據(jù)業(yè)務調整
    # 第二次刪緩存(把可能回填的舊值清掉)
    redis.delete(key)

三、延遲時間怎么定?

這是最關鍵的參數(shù),定太短沒效果,定太長影響性能。

建議公式:

延遲時間 ≈ 主從同步延遲 + 業(yè)務讀操作耗時 + 冗余緩沖

  • 主從同步延遲:如果有主從架構,通常 100ms~500ms
  • 業(yè)務讀操作耗時:查詢DB + 序列化 + 網絡往返
  • 冗余緩沖:再加 100~200ms 保險

實際建議:

  • 無主從:100~300ms
  • 有主從:300~800ms
  • 高并發(fā)場景:可以動態(tài)調整,或根據(jù)監(jiān)控數(shù)據(jù)優(yōu)化

四、第二次刪除失敗怎么辦?

如果第二次刪緩存時 Redis 掛了或網絡抖動,緩存還是會臟。

解決方案:引入異步重試

import threading
def update_with_retry(key, new_value):
    # 第一次刪 + 更新DB
    redis.delete(key)
    db.update(key, new_value)
    # 延遲后異步執(zhí)行第二次刪除
    def delayed_delete():
        time.sleep(0.5)
        try:
            redis.delete(key)
        except Exception:
            # 失敗則放入重試隊列(MQ 或本地延遲隊列)
            retry_queue.put(key)
    threading.Thread(target=delayed_delete).start()

更生產化的做法是用 消息隊列延遲任務框架(如 Celery、XXL-Job)來做第二次刪除,確保可靠執(zhí)行。

五、完整流程圖

寫請求到來
    │
    ▼
┌─────────────┐
│  刪除緩存    │?── 第一次刪除,清掉舊值
└─────────────┘
    │
    ▼
┌─────────────┐
│  更新數(shù)據(jù)庫  │
└─────────────┘
    │
    ▼
┌─────────────┐
│  延遲等待    │?── 等并發(fā)讀請求結束,舊值回填完成
└─────────────┘
    │
    ▼
┌─────────────┐
│  再次刪除緩存 │?── 第二次刪除,清掉可能回填的舊值
│  (帶重試)  │
└─────────────┘
    │
    ▼
   結束

六、優(yōu)缺點總結

優(yōu)點缺點
實現(xiàn)簡單,不引入額外組件延遲等待會阻塞寫請求(或用異步)
能有效降低緩存不一致概率延遲時間不好精確估算
兼容現(xiàn)有 Cache-Aside 架構極端高并發(fā)下仍可能有小概率不一致

七、適用場景

  • 讀多寫少:寫操作不頻繁,延遲等待的開銷可接受
  • 允許秒級最終一致:不要求實時強一致
  • 無主從或主從延遲可控:延遲時間能估算得準

八、一句話總結

延遲雙刪 = "先刪緩存 → 更新DB → 等一會兒 → 再刪一次",用"等一等"來覆蓋并發(fā)讀回填舊值的時間窗口。

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

相關文章

  • Redis實現(xiàn)每日簽到功能(大數(shù)據(jù)量)

    Redis實現(xiàn)每日簽到功能(大數(shù)據(jù)量)

    在面對百萬級用戶簽到情況下,傳統(tǒng)數(shù)據(jù)庫存儲和判斷會遇到瓶頸,使用Redis的二進制數(shù)據(jù)類型可實現(xiàn)高效的簽到功能,示例代碼展示了如何調用這些功能,包括當天簽到、補簽以及查詢簽到記錄,PHP結合Redis二進制數(shù)據(jù)類型可有效處理大數(shù)據(jù)量下的簽到問題
    2024-10-10
  • redis的Cacheable注解使用及說明

    redis的Cacheable注解使用及說明

    文章介紹了如何在Java應用中使用Spring的@Cacheable注解進行緩存配置,包括注解的使用、key的生成方式、觸發(fā)條件(condition)和排除條件(unless)的設置,并強調了緩存的持久性和清除機制
    2025-11-11
  • Redis?Server啟動過程的詳細步驟

    Redis?Server啟動過程的詳細步驟

    本文主要介紹了Redis?Server啟動過程的詳細步驟,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-02-02
  • Redis實現(xiàn)集群搭建+集群讀寫的示例

    Redis實現(xiàn)集群搭建+集群讀寫的示例

    本文介紹了Redis集群的搭建和讀寫操作,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2025-02-02
  • 利用yum安裝Redis的方法詳解

    利用yum安裝Redis的方法詳解

    Redis是一個開源的使用ANSI C語言編寫、支持網絡、可基于內存亦可持久化的日志型、Key-Value數(shù)據(jù)庫,并提供多種語言的API。從2010年3月15日起,Redis的開發(fā)工作由VMware主持。這篇文章主要介紹的是利用yum安裝Redis的方法,有需要的朋友們可以參考借鑒,下面來一起看看吧
    2016-11-11
  • 使用Redis實現(xiàn)分布式鎖的方法

    使用Redis實現(xiàn)分布式鎖的方法

    為了保證我們線上服務的并發(fā)性和安全性,目前我們的服務一般拋棄了單體應用,采用的都是擴展性很強的分布式架構,這篇文章主要介紹了使用Redis實現(xiàn)分布式鎖的方法,需要的朋友可以參考下
    2022-06-06
  • redis批量刪除namespace下的數(shù)據(jù)的實現(xiàn)步驟

    redis批量刪除namespace下的數(shù)據(jù)的實現(xiàn)步驟

    在開發(fā)中為了更好的管理數(shù)據(jù),對redis進行了分組存儲操作,在存值時加了命名空間來實現(xiàn),本文就來介紹一下redis批量刪除namespace下的數(shù)據(jù)的實現(xiàn)步驟,感興趣的可以了解一下
    2025-12-12
  • Redis分布式鎖升級版RedLock及SpringBoot實現(xiàn)方法

    Redis分布式鎖升級版RedLock及SpringBoot實現(xiàn)方法

    這篇文章主要介紹了Redis分布式鎖升級版RedLock及SpringBoot實現(xiàn),本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-02-02
  • Redis遠程連接Redis客戶端的實現(xiàn)步驟

    Redis遠程連接Redis客戶端的實現(xiàn)步驟

    本文主要介紹了Redis遠程連接Redis客戶端的實現(xiàn)步驟,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2022-06-06
  • redis服務器允許遠程主機訪問的方法

    redis服務器允許遠程主機訪問的方法

    今天小編就為大家分享一篇redis服務器允許遠程主機訪問的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-05-05

最新評論

肃宁县| 娄烦县| 通州市| 紫金县| 盐源县| 教育| 历史| 大理市| 刚察县| 乡城县| 聂荣县| 汝城县| 阿城市| 泸溪县| 黄浦区| 昌吉市| 商城县| 赞皇县| 威远县| 通辽市| 麻江县| 安福县| 宣化县| 桂东县| 西和县| 阳新县| 陇南市| 翼城县| 镇雄县| 哈巴河县| 夏河县| 长岭县| 德格县| 琼中| 建瓯市| 留坝县| 溧阳市| 玉林市| 龙里县| 双柏县| 礼泉县|