一路走来,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进行讨论和学习。
分享到:
相关推荐
SpringBoot整合GuavaCache缓存过程解析是指使用SpringBoot框架将GuavaCache整合到应用程序中,以提高应用程序的性能和响应速度。 GuavaCache的优点是: * 简单:GuavaCache的使用非常简单,只需要在pom.xml文件中...
在使用Guava Cache之前,需要在pom.xml文件中添加相应的依赖,包括Spring Boot、MyBatis、MySQL和Guava Cache等。在配置Guava Cache时,需要创建一个GuavaCacheConfig配置类,并在其中设置CacheManager。 ...
SpringBoot 使用 GuavaCache 实现简单缓存处理 在本篇文章中,我们将介绍如何使用 GuavaCache 在 SpringBoot 项目中实现简单的缓存处理。缓存机制可以减少对外部服务的查询请求,从而提高应用程序的性能。 问题...
本文将深入探讨如何在Spring Boot项目中集成并使用Guava Cache,以实现高效、灵活的缓存策略。 一、Spring Boot与Guava Cache简介 1. Spring Boot:作为Spring框架的微服务启动器,Spring Boot简化了Java应用的...
支持Spring 4(guava) 和Spring 5(caffeine) 二级缓存都使用redis 相关配置 注解支持 /** redis过期时间 */ redisExpires; /** 访问后过期时间,单位秒*/ expireAfterAccess=5; /** 写入后过期时间,...
首先,让我们来深入理解Spring Cache。Spring Cache允许开发者在不修改业务代码的情况下,通过简单的注解就能实现缓存功能。它使用AOP(面向切面编程)来拦截方法调用,并根据注解配置将结果存储到缓存中,下次调用...
使用SpringCache与Redis集成的优雅缓存解决方案,可以大大减少编写模板代码的工作量,提高应用程序的开发效率。同时,它还可以提高应用程序的性能,减少数据库压力。 SpringCache与Redis集成的优雅缓存解决方案是一...
本项目"spring-boot-redis-guava-caffeine-cache"主要探讨了如何在Spring Boot应用中集成Redis、Guava和Caffeine三种不同的缓存策略。 首先,Redis是一款开源的内存数据结构存储系统,常被用作数据库、缓存和消息...
2、Spring Cache利用了AOP,实现了基于注解的缓存功能,并且进行了合理的抽象,业务代码不用关心底层是使用了什么缓存框架,只需要简单地加一个注解,就能实现缓存功能了,做到了对代码侵入性做小。 3、由于市面上的...
Spring Cache是Spring框架的一个模块,它提供了一种统一的缓存抽象,支持多种缓存实现,如 EhCache、Guava Cache、Hibernate二级缓存等。通过使用Spring Cache,开发者可以在不修改代码的情况下,为应用程序添加缓存...
在Spring Boot中使用Guava Cache,需要添加Guava依赖,并配置缓存管理器: ```xml <groupId>com.google.guava</groupId> <artifactId>guava <version>30.1-jre @Configuration @EnableCaching public class ...
"Spring Cache 复合缓存管理器"指的是通过Spring Cache实现对多种缓存技术的集成和管理,例如 EhCache、Guava Cache 或者 Redis 等。这种复合缓存管理器允许开发者根据需求灵活选择和切换不同的缓存实现,同时提供了...
Spring 框架提供了自己的本地缓存方案,从 Spring 5 开始,Spring 将 Guava 剔除掉,替换成了 Caffeine。Caffeine 是一个高性能的缓存库,相比 Guava,有更好的性能和可扩展性。 在 Spring Boot 中,我们可以使用 ...
Spring Cache 是Spring框架提供的一种缓存抽象,从Spring 3.1版本开始引入,目的是为了简化应用程序中的缓存管理,实现缓存透明化。通过在方法上添加特定注解,如@Cacheable、@CacheEvict等,可以轻松地启用缓存功能...
Spring Cache抽象了缓存实现,允许开发者使用各种缓存技术,如EhCache、Guava Cache或 Hazelcast,而无需深入理解这些具体实现的细节。 描述中的链接指向了一篇CSDN博客文章,虽然具体内容无法在当前环境中访问,但...
在本项目"spring-boot-mybatis-cache-thymeleaf学习练习demo源码"中,我们可以深入学习和实践如何将Spring Boot、MyBatis、Cache(通常指的是Spring Cache)以及Thymeleaf这四个关键组件整合在一起,创建一个高效、...
这个抽象层使得我们可以使用不同的缓存解决方案(如 Ehcache、Guava Cache、Redis 等),并且对代码的影响降到最低。 核心概念: 1. **缓存注解**:Spring 提供了多种注解来实现缓存管理。其中,`@Cacheable` 用于...
learn_spring_multi_cache 使用spring cache构建的多级缓存 自由组合切换 guava redis memcache enhance map,充分利用了本地缓存的高效和分布式缓存的共享特性。
《Spring 3.1 缓存抽象教程》 在现代Web应用开发中,缓存机制是提高性能和响应速度的关键技术之一。Spring框架从3.1版本开始引入了强大的缓存抽象,使得开发者能够轻松地在应用程序中集成缓存功能。本教程将深入...