redis快取一致性問題

2021-10-23 01:38:43 字數 490 閱讀 8964

1、不一致產生的原因?

我們在是使用redis過程中,通常會這樣做,先讀取快取,如果快取不存在,則讀取資料庫。

不管是先寫庫,再刪除快取;還是先刪除快取,再寫庫,都有可能出現資料不一致的情況。

因為寫和讀是併發的,沒法保證順序,如果刪除了快取,還沒有來得及寫庫,另乙個執行緒就來讀取,發現快取為空,則去資料庫中讀取資料寫入快取,此時快取中為髒資料。如果先寫了庫,在刪除快取前,寫庫的執行緒宕機了,沒有刪除掉快取,則也會出現資料不一致情況。

如果是redis集群,或者主從模式,寫主讀從,由於redis複製存在一定的時間延遲,也有可能導致資料不一致。

2、優化思路

(1)讀操作優先讀取redis,不存在的話就去訪問mysql,並把讀到的資料寫回redis中;

(2)寫操作的話,直接寫mysql,成功後再寫入redis,替換掉原來的舊資料(可以在mysql端定義crud觸發器,在觸發crud操作後寫資料到redis,也可以在redis端解析binlog,再做相應的操作)

redis快取與mysql一致性問題

使用redis例項如下 先讀取快取,如果快取不存在,則讀取資料庫 object stuobj new object public stu getstufromcache string key return stu 問題分析 不管是先寫庫,再刪除快取 還是先刪快取,再寫庫,都有可能出現資料不一致的情況...

Redis快取雪崩 快取穿透 快取一致性問題

一 快取雪崩 1 快取失效時間相同導致大量快取同時失效 2 快取系統故障 事後 快取資料持久化,在故障後快速恢復快取系統 二 快取穿透 1 訪問不存在資料從而繞過快取,直接讀取資料庫 三 快取一致性 1 常規流程是 讀操作 命中快取則返回,無快取則讀資料庫並寫快取 寫操作 先刪除快取,再更新資料庫。...

快取一致性問題討論

在資料庫與快取之間的一致性問題?最好的是 先寫資料庫,再刪除快取.原因 寫資料庫之後證明寫成功了,順便把快取刪除了.寫成功之後拿到的資料就是最新的.寫資料庫失敗了,快取沒刪除,還是原來的資料,無傷大雅,寫失敗了,刪除快取成功了?這種事情不會發生的,即使發生了,也沒有問題,查庫,還是原來的資料.問題來...