Redis - 讀寫模式 - 快取一致性
阿新 • • 發佈:2022-06-01
Cache Aside Pattern(旁路快取模式)
讀:從cache中讀取資料,若讀取到則直接返回;cache中不存在則去database中讀取,然後更新到cache。
寫:先更新database然後刪除cache中的資料。
快取一致性
多併發情況下,需要延時雙刪,否則資料會不一致。
出現不一致的情況
1. 事務一往database更新資料 2. 事務二往database更新資料 3. 事務二完成database更新,刪除cache中資料 4. 此時介面被訪問,更新database資料到cache(此時還在讀取未更新到cache) 5. 事務一完成database更新,刪除cache中快取 5. 介面被訪問的資料更新到cache 結果:導致cache中的資料是database事務二更新完的資料,事務一的資料尚未更新到cache,此時出現快取一致性失效。
解決辦法:延時雙刪
- 刪除cache中的資料
- 更新database資料
- 延時500ms(延時時間要大於更新資料庫時間)
- 刪除cache中的資料
此時保證讀到的資料必定是最新的。
Read/Write Through Pattern(讀寫穿透)
讀:從cache中讀取資料,若讀取到則直接返回;cache中不存在則去database中讀取,然後更新到cache。
寫:先更新cache中的資料,若cache中不存在,則更新database,更新database時同步更新cache。
Write Behind Pattern(非同步快取寫入)
讀:從cache中讀取資料,若讀取到則直接返回;cache中不存在則去database中讀取,然後更新到cache。
寫:先更新cache中的資料,若cache中不存在,則更新database,更新database時非同步更新cache。