1. 程式人生 > 其它 >Redis - 讀寫模式 - 快取一致性

Redis - 讀寫模式 - 快取一致性

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,此時出現快取一致性失效。

解決辦法:延時雙刪

  1. 刪除cache中的資料
  2. 更新database資料
  3. 延時500ms(延時時間要大於更新資料庫時間)
  4. 刪除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。