一分鐘之聊聊緩存寫策略
通常來說,當系統寫數據到緩存的時候,在某個時點也需要更新緩存后端的數據庫。究竟在哪個時點更新后端數據庫,是由緩存寫策略來控制。
緩存寫策略,主要包含兩個基礎方法,Write-through和Write-behind。
Write-through,寫數據到緩存和寫數據到數據庫是同步的。如果寫數據***緩存,那么可以先刷新緩存,然后再寫數據庫。如果寫數據庫不***緩存,這個時候是可以直接寫數據庫了。等到讀的時候,如果不***緩存,再從數據庫中取數據緩存起來。
Write-behind,延后寫數據到數據庫。其中一種實現方法是異步寫數據到數據庫。首先寫數據到緩存,然后發布一個寫事件到消息隊列,此時即可響應客戶端了。消息隊列的消費者處理寫事件,將數據寫到數據庫中。Write-behind如果對于頻繁的數據寫表操作,是能提高寫性能的。當然如果在寫緩存成功,但寫事件發布成功前,緩存 server 宕機了,也是有可能數據丟失了。
大多數的系統都是讀多寫少,所以Write-through策略應用相當廣泛,就如spring cache 中的CachePut 注解作用。Ehcache緩存支持這兩種策略。
***提出這樣一個場景,需要從數據庫中,取一些數據(數據會不定時改變,相當頻繁),然后做一些復雜耗時的計算,再將結果最終保存到數據庫中,這個時候我們該如何做緩存?