1. 程式人生 > >redis資料一致性,開發中關於快取和資料同步問題

redis資料一致性,開發中關於快取和資料同步問題

在開發中出現很多關於快取和資料共存問題,本小G網上翻閱cache aside pattern 一些資料,加上專案體驗寫下
寫下這一小簡,大家一塊來探討:
使用場景:在使用redis來做資料快取,減輕資料壓力和速度,但是有一個問題就是快取和mysql資料如何資料一致
一般開發設計為:重點內容
1. 查詢流程:如果在快取查詢到就直接返回快取資料,end;
2. 查詢流程:如果查詢不到,就查詢資料庫,然後進行insert cache資料,end;
3. 更新流程:更新庫,update或dele快取,end;
4. 更新流程:新增庫,新增庫;
大家一般設計如上,但是會出出現併發read和write操作,這樣就可以會出現讀時候在insert cahe的時候,會insert,庫更新之前資料,產生髒資料,小G:雖然讀一般比較快,這種概率很低但是還是存在
個人設計簡介:
在資料並不是很大(其他文章中提到:canal阿里這中原理,不過感覺動靜有點大,哈,如果併發不是很大),首先
個人認為如果不進行鎖(小G:如果加鎖可以在,insert cache時候進行判斷是否有鎖,如果有不進行insert操作,這中設計我個人感覺,還是影響力比較小),這種髒資料都會存在,但是針對不是很注重這種事物髒資料,可以放寬下,
設計如下:
1、加鎖對資料在進行快取操作下(業務不是很注重髒資料可以忽略這點)
2、進行先加快取然後再更新庫,如果更新庫有問題,進行刪除快取,這樣就不會出現類似長時間存在髒資料無法解決問題
3、增加快取的有效時間,這樣也可以減少髒資料存活週期;