目錄
一、場景:
二、保證雙寫一致性的策略
三,四種策略的優缺點
首頁 資料庫 mysql教程 怎麼確保mysql和redis的雙寫一致性

怎麼確保mysql和redis的雙寫一致性

May 28, 2023 pm 06:16 PM
mysql redis

一、場景:

雙寫一致性指的是當我們更新了資料庫的資料之後redis中的資料    也要同步去更新。使用redis讀取資料的流程,當用戶存取資料的時候,會先從快取中讀取數據,如果命中快取的話,那麼直接把快取中的資料傳回給用戶,如果快取中沒有資料的話,先查詢資料庫把查詢到的資料儲存到快取中,然後回傳給使用者。

怎麼確保mysql和redis的雙寫一致性

二、保證雙寫一致性的策略

1、先更新緩存,再更新資料庫

2、先更新資料庫,再更新快取

3、先刪除緩存,再更新資料庫

4、先更新資料庫,再刪除快取

三,四種策略的優缺點

1、先更新緩存,再更新資料庫

問題很明顯如果更新快取成功,更新資料庫失敗,就會造成快取的髒資料

#2、先更新資料庫,再更新快取

如果再高並發的情況下,可能會存在如下的情況,線程A更新了資料庫,如果由於網路或其他的原因,線程A還來不及更新緩存,這時候有一個進程B更新了資料庫,更新了緩存,這時候進程A才更新緩存,這時候就會導致線程B對緩存的更新丟失了,像事務丟失的情況

3、先刪除緩存,再更新資料庫

這種策略可能已經避免掉了,策略2中快取遺失的情況,但是再高並發的情況下,也會有不一致的情況,例如線程A做寫操作,首先刪除緩存然後準備跟新資料庫,這時候,線程B執行了寫入操作,沒有命中緩存,然後查詢資料庫,這時候讀取的是舊值,並把查詢到的舊值保存到快取中,接著線程A完成了資料庫的更新,這時候資料庫和快取又出現了不一致的情況,解決方案:我們只要再線程A,完成資料庫的更新之後,稍作延遲再刪除一次緩存,也叫做延遲雙刪。這裡的延遲時間一定大於業務的一次讀取操作的時間。

4、先更新資料庫,再刪除快取

再高並發的情況下,也會有不一致的情況,例如執行緒A做讀取資料的操作,正準備寫入快取的時候,線程B更新了資料庫,然後執行了刪除快取的操作,這時候線程A才把舊值寫入到快取中,雖然這種情況出現的機率比較低,因為寫入操作的時候要大於一次讀取操作的時間的。作為替換,可以將原話簡化並重新組織結構: 為處理刪除失敗的情況,建議採用延遲雙刪方案。即使延時雙刪仍存在問題,也可重複進行刪除操作,直到快取被徹底清除。如果刪除失敗,我們可以將需要刪除的鍵放入佇列中,一遍又一遍地嘗試刪除,直到刪除成功為止。

以上是怎麼確保mysql和redis的雙寫一致性的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
2 週前 By 尊渡假赌尊渡假赌尊渡假赌
倉庫:如何復興隊友
4 週前 By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island冒險:如何獲得巨型種子
3 週前 By 尊渡假赌尊渡假赌尊渡假赌

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

Windows11安裝10.0.22000.100跳出0x80242008錯誤解決方法 Windows11安裝10.0.22000.100跳出0x80242008錯誤解決方法 May 08, 2024 pm 03:50 PM

Windows11安裝10.0.22000.100跳出0x80242008錯誤解決方法

PHP 的大數據結構處理技巧 PHP 的大數據結構處理技巧 May 08, 2024 am 10:24 AM

PHP 的大數據結構處理技巧

如何優化 PHP 中的 MySQL 查詢效能? 如何優化 PHP 中的 MySQL 查詢效能? Jun 03, 2024 pm 08:11 PM

如何優化 PHP 中的 MySQL 查詢效能?

如何在 PHP 中使用 MySQL 備份和還原? 如何在 PHP 中使用 MySQL 備份和還原? Jun 03, 2024 pm 12:19 PM

如何在 PHP 中使用 MySQL 備份和還原?

如何使用 PHP 插入資料到 MySQL 表? 如何使用 PHP 插入資料到 MySQL 表? Jun 02, 2024 pm 02:26 PM

如何使用 PHP 插入資料到 MySQL 表?

如何修復 MySQL 8.4 上的 mysql_native_password 未載入錯誤 如何修復 MySQL 8.4 上的 mysql_native_password 未載入錯誤 Dec 09, 2024 am 11:42 AM

如何修復 MySQL 8.4 上的 mysql_native_password 未載入錯誤

如何在 PHP 中使用 MySQL 預存程序? 如何在 PHP 中使用 MySQL 預存程序? Jun 02, 2024 pm 02:13 PM

如何在 PHP 中使用 MySQL 預存程序?

PHP開發中的快取機制與應用實戰 PHP開發中的快取機制與應用實戰 May 09, 2024 pm 01:30 PM

PHP開發中的快取機制與應用實戰

See all articles