文档章节

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

码王信息
 码王信息
发布于 2017/04/24 12:00
字数 844
阅读 993
收藏 6

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

© 著作权归作者所有

码王信息
粉丝 14
博文 13
码字总数 15837
作品 0
长沙
私信 提问
Spring支持的CacheManager

数据缓存Cache 为何要用缓存、缓存的目的是为了什么? 我们知道一个程序的瓶颈在于数据库,内存的速度远远大于硬盘的速度,当我们一次又一次 请求数据库或远程服务时会导致大量的时间耗费在数...

恋码之子
2018/12/11
0
0
为什么不考虑使用Spring的IOC来管理bean?

@JFinal 你好,想跟你请教个问题: 我看到您在一些回答网友文章的帖子中说建议放弃Spring,但是我觉得Spring的IOC模式挺不错,很适合在Web中的开发使用,那么您建议放弃Spring的理由是什么呢...

风花狂月
2015/04/23
1K
4
如何 Oauth2实现

@红薯 你好,想跟你请教个问题:OSC网站的Oauth2是用什么工具(Jar包)实现的,Spring版本需要多少? 因为我们项目框架的Spring版本是3.0.2的,之前试了下Spring Security Oauth2可以实现 ,...

小骏骏
2014/09/16
252
0
向Spring大佬低头——大量源码流出解析

用Spring框架做了几年的开发,只停留在会用的阶段上,然而Spring的设计思想和原理确实一个巨大的宝库。大部分人仅仅知道怎么去配,或着加上什么属性就能达到什么效果,这些东西都可以通过查文...

Java团长17
2018/07/11
0
0
Guava学习:Cache缓存入门

一、什么是缓存? 根据科普中国的定义,缓存就是数据交换的缓冲区(称作Cache),当某一硬件要读取数据时,会首先从缓存中查找需要的数据,如果找到了则直接执行,找不到的话则从内存中找。由...

jiangmitiao
2016/10/27
111
0

没有更多内容

加载失败,请刷新页面

加载更多

C# 视频多人脸识别的实现过程

整个项目是用虹软技术完成开发 上一篇内容的调整,提交到git了,https://github.com/catzhou2002/ArcFaceDemo 基本思路如下: 一、识别线程 1.获取当前图片 2.识别当前图片的人脸位置,并将结...

是哇兴哥棒棒哒
9分钟前
0
0
Spring Cloud Eureka 你还在让它裸奔吗??

前些天栈长在微信公众号Java技术栈分享了 Spring Cloud Eureka 最新版 实现注册中心的实战教程:Spring Cloud Eureka 注册中心集群搭建,Greenwich 最新版!,成功进入 Eureka 控制台页面。 ...

Java技术栈
26分钟前
1
0
linux gyp ERR! stack Error: EACCES: permission denied, mkdir ‘xxx’

在使用linux npm install的出现这个错误了,百度了下,没有权限加个参数即可 npm install --unsafe-perm

朝如青丝暮成雪
27分钟前
0
0
使用kubeadm 搭建K8s集群

1. 参考官网 https://kubernetes.io/docs/setup/independent/install-kubeadm/

whhbb
55分钟前
2
0
Dubbo 3.0 !提升不止一点点!

Dubbo 自 2011 年 10 月 27 日开源后,已被许多非阿里系的公司使用,其中既有当当网、网易考拉等互联网公司,也不乏中国人寿、青岛海尔等大型传统企业。 自去年 12 月开始,Dubbo 3.0 便已正...

编程SHA
55分钟前
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部