一路走来,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进行讨论和学习。