是什么讓spring 5放棄了使用Guava Cache?


一路走來,Spring社區從剛開始的核心模塊一直發展到現在,最近Sping5也完成了M5的發布, 相信不久之后第一個RELEASE版本也會發布。里面有很多特性是和即將要發布的JAVA 9息息相關的。今天我們就針對一個比較重要的改變:Spring5即將放棄掉Guava Cache作為緩存機制,而改用Caffeine作為新的本地Cache的組件。

最近幾年,相信大家對於Google的開源工具包Guava有大范圍的使用,Guava工具包里面又屬Cache模塊最被人熟知。為什么Spring 5要放棄一個這么優秀的包呢?我想應該最大的原因就是Guava Cache所使用的緩存更新策略的問題。

什么是緩存更新策略呢?我認為這個策略是本地Cache的重中之重,一個好的更新策略和一個不好更新策略,對於本地Cache的性能有很大的差別。我們都知道LRU是一種比較簡單並且十分有效的Cache更新策略。Guava Cache正是基於LRU所實現的本地緩存對象。並且能夠很好的支持多種淘汰策略(基於對象個數、基於訪問頻率等等)。

那么為什么這么好的東西需要被淘汰呢, 如果對於本地Cache有過深入研究的人應該知道LRU算法基本可以滿足大部分的場景,但是很多人為了精益求精,基於LRU的算法,又在此基礎上提出了一系列更好的,更有效果的淘汰策略。比如有 ARC,LIRS 和 W-TinyLFU等都提供了接近最理想的命中率,他們這些算法進一步提高了本地緩存的效率。

Cache的目的就是緩存,如果在功能一樣的情況下,最重要的突破就是性能了。從功能上來看Guava Cache已經比較完善了,基本滿足了絕大部分本地緩存的需求。那么Spring 5使用Caffeine來代替Guava Cache就是因為性能的問題了。首先我們來看看官方給出來的性能測試對比的報告。

場景1:

8個線程讀,100%的讀操作

是什么讓spring 5放棄了使用Guava Cache?

場景二:

6個線程讀,2個線程寫,也就是75%的讀操作,25%的寫操作

是什么讓spring 5放棄了使用Guava Cache?

場景三:

8個線程寫,100%的寫操作

是什么讓spring 5放棄了使用Guava Cache?

可以從數據看出來Caffeine的性能都比Guava要好。

然后Caffeine的API的操作功能和Guava是基本保持一致的,並且Caffeine為了兼容之前是Guava的用戶,做了一個Guava的Adapter給大家使用也是十分的貼心。

當然Caffeine的調整不只有算法上面的調整,還有內存方面的優化以及一些實用的方法沒有覆蓋到。不過相信僅僅是上面提到的新特點就會讓人們有心動的想法去嘗試。

看到這里詳細大家也知道為什么Spring 5 會放棄Guava轉向Caffeine了吧!

最后如果覺得所講的東西能夠幫助到你,並且希望了解更多的知識,進行更詳細的深入的學習,歡迎加群632109190進行討論和學習。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM