redis怎麼保證快取與資料庫的一致性
為啥會不一致
先操作快取,在寫資料庫成功之前,如果有讀請求發生,可能導致舊資料入快取,引發資料不一致。
資料庫有資料, 快取沒有資料;
資料庫有資料, 快取也有資料,資料不相等;
資料庫沒有資料,快取有資料。
首先嘗試從快取讀取,讀到資料則直接返回;如果讀不到,就讀資料庫,並將資料會寫到快取,並返回。
需要更新資料時,先更新資料庫,然後把快取裡對應的資料失效掉(刪掉)。
對於第一種,在讀資料的時候,會自動把資料庫的資料寫到快取,因此不一致情況可以自動消除.
對於第二種,資料最終不一致,但他們之前在某個時間點是一致的(在快取載入的那一刻,它一定是和資料庫一致的)。而這種不一致,正是由於更新資料所引發的。這時快取和資料庫不一致的原因,一定是資料庫已經更新了,但是刪除快取卻失敗了。
對於第三種,情況和第二種類似,資料庫的資料已經刪了,但是刪除快取的時候失敗了,導致資料庫沒有資料,但是快取有,造成了快取和資料庫不一致。
對刪除快取進行重試。
定期進行全量更新,定期清理快取,然後再重新全量載入。
給所有的快取設定乙個失效期。(有點:設定的失效期越短,資料一致性越高 缺點:設定的失效期越短,查詢資料庫的操作就會越頻繁)
可能還有更好的解決思路和方法 僅供參考
Redis 如何保證快取與資料庫雙寫時的資料一致性
寫請求來了,要更新資料庫和快取,一前一後更新,就可能導致快取和db中的資料在一段時間內不一致。你只要用快取,就可能會涉及到快取與資料庫雙儲存雙寫,你只要是雙寫,就一定會有資料一致性的問題,那麼你如何解決一致性問題?一般來說,就是如果你的系統不是嚴格要求快取 資料庫必須一致性的話,快取可以稍微的跟資料...
Redis如何保證快取與資料庫的雙寫一致性?
原創 只要用快取,就可能會涉及到快取與資料庫雙儲存雙寫,你只要是雙寫,就一定會有資料一致性的問題 那麼,如何解決一致性問題?一般來說,如果允許快取可以稍微的跟資料庫偶爾有不一致的情況,也就是說如果你的系統不是嚴格要求快取 資料庫必須保持一致性的話,最好不要做這個方案。即 讀請求和寫請求序列化,串到乙...
redis快取如何同步資料庫
redis快取如何同步資料庫 redis mysql模式 讀 服務程式先從快取中讀取資料,如果命中,則將資料讀出。如果未命中,則在資料庫中讀取資料,然後將資料寫入到快取中去。更新資料 常見的模式是先到資料庫中寫入,然後刪除快取中的資料。產生的不一致 讀 只是讀資料一般不會有不一致出現。更新 1 資料...