最近做項目遇到了與緩存有關的問題,緩存的更新是一個值得深入研究的操作。
看了網上好多的思路,往往都是先刪除緩存,再去從數據庫讀取,這樣的結果很有可能會導致數據不一致,查了一些資料,找到了“耗子叔”的文章,闡述了緩存更新的幾種方法
Cache Aside
- 失效:應用程序先從cache中取數據,沒取到就去數據庫中找,成功后放入緩存
- 命中:從cache中直接返回
- 更新:先把更新數據庫,成功后,再讓緩存失效
Read/Write Through Pattern
我們可以看到,在上面的Cache Aside套路中,我們的應用代碼需要維護兩個數據存儲,一個是緩存(Cache),一個是數據庫(Repository)。所以,應用程序比較啰嗦。而Read/Write Through套路是把更新數據庫(Repository)的操作由緩存自己代理了,所以,對於應用層來說,就簡單很多了。可以理解為,應用認為后端就是一個單一的存儲,而存儲自己維護自己的Cache。
Read Through
Read Through 套路就是在查詢操作中更新緩存,也就是說,當緩存失效的時候(過期或LRU換出),Cache Aside是由調用方負責把數據加載入緩存,而Read Through則用緩存服務自己來加載,從而對應用方是透明的。
Write Through
Write Through 套路和Read Through相仿,不過是在更新數據時發生。當有數據更新的時候,如果沒有命中緩存,直接更新數據庫,然后返回。如果命中了緩存,則更新緩存,然后再由Cache自己更新數據庫(這是一個同步操作)
Write Behind Caching Pattern
這個不是太了解,可以參考耗子叔文章