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

场景二:

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

场景三:

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

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

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

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

看到这里详细大家也知道为什么Spring 5 会放弃Guava转向Caffeine了吧!

最后如果觉得所讲的东西能够帮助到你,并且希望了解更多的知识,进行更详细的深入的学习,欢迎加群632109190进行讨论和学习。

转载于:https://www.cnblogs.com/mawang/p/6756192.html

是什么让spring 5放弃了使用Guava Cache?相关推荐

  1. 是什么让 Spring5 放弃了使用 Guava Cache?

    来源:https://albenw.github.io/posts/a4ae1aa2/ 概要 Caffeine是一个高性能,高命中率,低内存占用,near optimal 的本地缓存,简单来说它是Gu ...

  2. Spring Caching抽象和Google Guava Cache

    Spring为缓存昂贵的方法调用提供了强大的开箱即用支持. 这里详细介绍了缓存抽象. 我的目的是要介绍Spring现在为框架的4.0+版本提供的较新的缓存实现之一-使用Google Guava Cac ...

  3. Guava Cache本地缓存在 Spring Boot应用中的实践

    概述 在如今高并发的互联网应用中,缓存的地位举足轻重,对提升程序性能帮助不小.而 3.x开始的 Spring也引入了对 Cache的支持,那对于如今发展得如火如荼的 Spring Boot来说自然也是 ...

  4. Guava Cache探索及spring项目整合GuavaCache实例

    背景 对于高频访问但是低频更新的数据我们一般会做缓存,尤其是在并发量比较高的业务里,原始的手段我们可以使用HashMap或者ConcurrentHashMap来存储. 这样没什么毛病,但是会面临一个问 ...

  5. spring boot guava cache 缓存学习

    http://blog.csdn.net/hy245120020/article/details/78065676 ****************************************** ...

  6. Spring Boot 揭秘与实战(二) 数据缓存篇 - Guava Cache

    本文,讲解 Spring Boot 如何集成 Guava Cache,实现缓存. 博客地址:blog.720ui.com/ 在阅读「Spring Boot 揭秘与实战(二) 数据缓存篇 - 快速入门」 ...

  7. Spring Boot 集成 本地缓存Guava框架

    Spring Boot 作为主流微服务框架,拥有成熟的社区生态.市场应用广泛,为了方便大家,整理了一个基于spring boot的常用中间件快速集成入门系列手册,涉及RPC.缓存.消息队列.分库分表. ...

  8. 后端系统的缓存使用浅谈

    作者 | 周明岐 杏仁医生后端负责人,中青年码农,关注 Scala / Go 和团队成长. 1. 什么是缓存 缓存有很多种,从 CPU 缓存.磁盘缓存到浏览器缓存等,本文所说的缓存,主要针对后端系统的 ...

  9. 看了阿里大佬用的本地缓存,那叫一个优雅!

    本文经授权转载自微信公众号:阿里开发者,作者:杨贤(临景) Java缓存技术可分为远端缓存和本地缓存,远端缓存常用的方案有著名的redis和memcache,而本地缓存的代表技术主要有HashMap, ...

  10. Java本地高性能缓存的几种实现方式

    Java缓存技术可分为远端缓存和本地缓存,远端缓存常用的方案有著名的redis和memcache,而本地缓存的代表技术主要有HashMap,Guava Cache,Caffeine和Encahche. ...

最新文章

  1. zabbix.php访问不了_zabbix_配置Nginx连接php
  2. 2020诺奖预测出炉!一位华人学者入选
  3. java 调度框架_java调度框架Quartz(一)
  4. jq常用过滤器_JQuery的常用选择器、过滤器、方法全面介绍
  5. 40个html作品,40个效果惊人的单页设计
  6. 半个月可以写出一个电脑操作系统吗?
  7. NOIP2012pj文化之旅[floyd]
  8. 详解tf.Session()和tf.InteractiveSession()的区别
  9. EverWeb for Mac(网页设计软件)v3.5.1中文版
  10. EXTJS弹出框关闭 隐藏 显示都没问题
  11. 2020年互联网大厂中秋礼盒PK!看看你的礼盒怎么样
  12. c语言99乘法表流程图表,C语言做99乘法表.doc
  13. Guava-Joiner工具类
  14. TSL237 简介
  15. Unity 计算模型的中心点的方法
  16. Problem A. Alarm Clock
  17. 新手学Windows XP
  18. GNN在推荐系统的应用——>GC-MC与STAR-GCN
  19. 优质高效,阿里甩出SpringBoot巅峰之作,进阶不二之选
  20. 虚拟服务器IP地址创建,虚拟服务器的ip地址

热门文章

  1. 苹果Mac重复文件清理工具:​​​​Tidy Up
  2. iOS 在视图中调整按钮距离边框的位置
  3. SVN客户端smartsvn详细功能
  4. Mac电脑用CrossOver安装的Windows软件在哪?
  5. Metasploit物联网安全渗透测试增加对硬件的支持
  6. 新一代RPC框架-GRPC
  7. 如何监控 Tomcat?Zabbix 与 Cloud Insight 对比
  8. LevelDB源码之五Current文件\Manifest文件\版本信息
  9. awk学习笔记(8) - 简单的正则匹配
  10. 二手房六大产权问题最关键