一路走來,Spring社區從剛開始的核心模塊一直髮展到如今,最近Sping5也完成了M5的發佈, 相信不久以後第一個RELEASE版本也會發布。裏面有不少特性是和即將要發佈的JAVA 9息息相關的。今天咱們就針對一個比較重要的改變:Spring5即將放棄掉Guava Cache做爲緩存機制,而改用Caffeine做爲新的本地Cache的組件。算法
最近幾年,相信你們對於Google的開源工具包Guava有大範圍的使用,Guava工具包裏面又屬Cache模塊最被人熟知。爲何Spring 5要放棄一個這麼優秀的包呢?我想應該最大的緣由就是Guava Cache所使用的緩存更新策略的問題。spring
什麼是緩存更新策略呢?我認爲這個策略是本地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%的讀操做測試
場景二:優化
6個線程讀,2個線程寫,也就是75%的讀操做,25%的寫操做線程
場景三:3d
8個線程寫,100%的寫操做
能夠從數據看出來Caffeine的性能都比Guava要好。
而後Caffeine的API的操做功能和Guava是基本保持一致的,而且Caffeine爲了兼容以前是Guava的用戶,作了一個Guava的Adapter給你們使用也是十分的貼心。
固然Caffeine的調整不僅有算法上面的調整,還有內存方面的優化以及一些實用的方法沒有覆蓋到。不過相信僅僅是上面提到的新特色就會讓人們有心動的想法去嘗試。
看到這裏詳細你們也知道爲何Spring 5 會放棄Guava轉向Caffeine了吧!
最後若是以爲所講的東西可以幫助到你,而且但願瞭解更多的知識,進行更詳細的深刻的學習,歡迎加羣632109190進行討論和學習。