1. 程式人生 > >本地快取高效能之王Caffeine

本地快取高效能之王Caffeine

### 前言 隨著網際網路的高速發展,市面上也出現了越來越多的網站和app。我們判斷一個軟體是否好用,使用者體驗就是一個重要的衡量標準。比如說我們經常用的微信,開啟一個頁面要十幾秒,發個語音要幾分鐘對方才能收到。相信這樣的軟體大家肯定是都不願意用的。軟體要做到使用者體驗好,響應速度快,快取就是必不可少的一個神器。快取又分程序內快取和分散式快取兩種:分散式快取如redis、memcached等,還有本地(程序內)快取如ehcache、GuavaCache、Caffeine等。說起Guava Cache,很多人都不會陌生,它是Google Guava工具包中的一個非常方便易用的本地化快取實現,基於LRU演算法實現,支援多種快取過期策略。由於Guava的大量使用,Guava Cache也得到了大量的應用。但是,Guava Cache的效能一定是最好的嗎?也許,曾經它的效能是非常不錯的。正所謂長江後浪推前浪,前浪被拍在沙灘上。我們就來介紹一個比Guava Cache效能更高的快取框架:**Caffeine**。 > Tips: Spring5(SpringBoot2)開始用Caffeine取代guava.詳見官方資訊SPR-13797 https://jira.spring.io/browse/SPR-13797 ### 官方效能比較 以下測試都是基於**jmh**測試的,[官網地址](https://github.com/ben-manes/caffeine/wiki/Benchmarks) 測試為什麼要基於jmh測試,[可以參考知乎上R回答](https://www.zhihu.com/question/58735131/answer/307771944) > 在HotSpot VM上跑microbenchmark切記不要在main()裡跑迴圈計時就完事。這是典型錯誤。重要的事情重複三遍:請用JMH,請用JMH,請用JMH。除非非常瞭解HotSpot的實現細節,在main裡這樣跑迴圈計時得到的結果其實對一般程式設計師來說根本沒有任何意義,因為無法解釋。 - 8個執行緒讀,100%的讀操作 ![](https://img-blog.csdnimg.cn/20200502004429877.JPEG#pic_center) - 6個執行緒讀,2個執行緒寫,也就是75%的讀操作,25%的寫操作。 ![](https://img-blog.csdnimg.cn/20200502004634832.JPEG) - 8個執行緒寫,100%的寫操作 ![](https://img-blog.csdnimg.cn/20200502004705270.JPEG) #### 對比結論 可以從資料看出來Caffeine的效能都比Guava要好。然後Caffeine的API的操作功能和Guava是基本保持一致的,並且 Caffeine為了相容之前是Guava的使用者,做了一個Guava的Adapter給大家使用也是十分的貼心。 ### 如何使用 - 在 pom.xml 中新增 caffeine 依賴 ```xml ``` ### 建立物件 ```jav