是什么让spring 5放弃了使用Guava Cache?

一路走来,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%的读操做测试

是什么让spring 5放弃了使用Guava Cache?

场景二:优化

6个线程读,2个线程写,也就是75%的读操做,25%的写操做线程

是什么让spring 5放弃了使用Guava Cache?

场景三:3d

8个线程写,100%的写操做

是什么让spring 5放弃了使用Guava Cache?

能够从数据看出来Caffeine的性能都比Guava要好。

而后Caffeine的API的操做功能和Guava是基本保持一致的,而且Caffeine为了兼容以前是Guava的用户,作了一个Guava的Adapter给你们使用也是十分的贴心。

固然Caffeine的调整不仅有算法上面的调整,还有内存方面的优化以及一些实用的方法没有覆盖到。不过相信仅仅是上面提到的新特色就会让人们有心动的想法去尝试。

看到这里详细你们也知道为何Spring 5 会放弃Guava转向Caffeine了吧!

最后若是以为所讲的东西可以帮助到你,而且但愿了解更多的知识,进行更详细的深刻的学习,欢迎加群632109190进行讨论和学习。

相关文章
相关标签/搜索