Redis和資料庫之間的資料一致性問題

2021-10-11 05:09:17 字數 503 閱讀 1466

redis和資料庫之間資料不一致的問題。

在高併發場景下,同時有讀和寫的的操作,不管是先刪除快取,再寫資料庫,還是先寫庫,再刪快取,都有可能出現資料不一致的情況。

1. 如果先刪除快取,在寫資料庫之前,有個讀資料的執行緒發現快取為空,就去讀取資料庫,讀到的是髒資料,拿髒資料更新redis快取,導致了redis與資料庫之間的資料不一致。

2. 如果先寫資料庫,在刪除快取之前,寫資料的執行緒宕機了,也會導致資料不一致的情況。

延時雙刪

寫庫前後都刪除快取一次,新增延時的目的是在寫完庫之後,等待讀執行緒結束,延時之後在刪除一次快取。這樣可以解決快取不一致的問題,除非讀執行緒讀取資料的時間比延時時間還要長。

缺點就是延時帶來了寫請求的耗時。

偽**如下:

public void write(string key,object data)

如何redis和資料庫之間的一致性?

1 不一致產生的原因?我們在是使用redis過程中,通常會這樣做,先讀取快取,如果快取不存在,則讀取資料庫。不管是先寫庫,再刪除快取 還是先刪除快取,再寫庫,都有可能出現資料不一致的情況。因為寫和讀是併發的,沒法保證順序,如果刪除了快取,還沒有來得及寫庫,另乙個執行緒就來讀取,發現快取為空,則去資料...

資料庫和資料庫物件

系統資料庫是指安裝完mysql伺服器後,會附帶的一些資料庫,系統資料庫會記錄一些必需的資訊,使用者不能直接修改這些系統資料庫。各個系統資料庫的作用如下 information schema 主要儲存系統中的一些資料庫物件資訊,如使用者表資訊 列資訊 許可權資訊 字符集資訊和分割槽資訊等。perfor...

資料庫和資料庫例項

以前一直把資料庫和資料庫例項弄混淆,最近讀 mysql 技術內幕 innodb 儲存引擎 得到了答案。資料庫 物理作業系統檔案或其他形式檔案型別的集合。在mysql資料庫中,資料庫檔案可以是frm myd myi ibd結尾的檔案。例項 mysql資料庫和後台執行緒以及乙個共享記憶體區組成。共享記憶...