自从2011年提出以来,JCache已经成为了提高应用程序性能、减少数据库负载和提升用户体验的重要手段。 本文将深入浅出地介绍JCache的核心概念、常见问题、易错点以及如何避免这些错误,并通过代码示例来加深理解。 JCache核心概念JCache定义了一套标准的API,让开发者能够轻松地在应用中集成缓存功能,而无需绑定到特定的缓存实现。 如何使用JCache配置与使用示例首先,确保你的项目依赖中包含了JCache的实现。 通过JCache,我们可以轻松地在应用中集成缓存功能,提高数据访问效率。结论JCache作为Java缓存的标准,为开发者提供了一套强大且灵活的工具集,以应对现代应用中常见的性能挑战。
图片 虽迟但到的JSR107 —— JCache API 提到JAVA中的“行业规矩”,JSR是一个绕不开的话题。 根据上述介绍,一个基于JCache API实现的缓存框架在实际项目中使用时的对象层级关系可能会是下面这种场景(假设使用LRU策略存储部门信息、使用普通策略存储用户信息): 图片 那么如何去理解JCache 至此呢,我们厘清了JCache API规范的大致内容。 对于缓存框架实现者而言,遵循JCache API需要实现众多的接口,需要做很多额外的实现处理。 此外,Redis的本地客户端Redisson也有实现全套JCache API规范,用户可以基于Redisson调用JCache API的标准接口来进行缓存数据的操作。
与JCache缓存对比: JCache 是一种标准的缓存规范,提供了统一的API和功能,支持多种缓存实现。 JCache缓存机制 JCache 缓存机制: JCache 是一种标准的缓存规范,旨在提供统一的缓存API和功能,使得开发人员可以在不同的缓存实现之间进行切换和替换。 JCache 实现: JCache 是一个标准规范,并不是一个具体的实现。 配置 JCache 缓存管理器: 在 Dubbo 的配置文件中,配置 JCache 缓存管理器,指定具体的 JCache 实现和相应的配置参数。可以配置缓存的大小、过期时间、淘汰策略等。 实现jcache <!
JCache ---- 为什么要在 Java 分布式应用程序中使用缓存? 在提高应用程序速度和性能上,每一毫秒都很重要。 下一节将讨论 Redisson 中分布式缓存的三个重要实现:Maps、Spring Cache 和 JCache。 1. JCache JCache 是一个 Java 缓存 API,允许开发人员从缓存临时存储、检索、更新和删除对象。 Redisson 提供了 Redis 的 JCache API 实现。 下面是在 Redisson 中使用默认配置调用 JCache API 的示例: MutableConfiguration<String, String> config = new MutableConfiguration 实现已经通过 JCache TCK 的所有测试。
下一节将讨论 Redisson 中分布式缓存的三个重要实现:Maps、Spring Cache 和 JCache。 1. JCache JCache 是一个 Java 缓存 API,允许开发人员从缓存临时存储、检索、更新和删除对象。 Redisson 提供了 Redis 的 JCache API 实现。 下面是在 Redisson 中使用默认配置调用 JCache API 的示例: MutableConfiguration<String, String> config = new MutableConfiguration getCacheManager(); Cache<String, String> cache = manager.createCache("namedCache", config); Redisson 的 JCache 实现已经通过 JCache TCK 的所有测试。
JCache(JSR-107)(EhCache 3,Hazelcast,Infinispan等) 3. EhCache 2.x 4. Hazelcast 5. Infinispan 6. 如果手动添 加依赖项,则必须包含 spring-context-support 才能使用JCache,EhCache 2.x或Guava支持。 32.1.2 JCache(JSR-107) JCache通过类路径上的 javax.cache.spi.CachingProvider 进行自举(即类路径上存在符合JSR-107的缓存 库), spring-boot-starter-cache =com.acme.MyCachingProvider spring.cache.jcache.config=classpath:acme.xml 当缓存库同时提供本机实现和JSR-107支持时,Spring 如果单个 HazelcastInstance 可用,它也会自动重用于 CacheManager ,除非指定 了 spring.cache.jcache.config 属性。
下一节将讨论 Redisson 中分布式缓存的三个重要实现:Maps、Spring Cache 和 JCache。 1. JCache JCache 是一个 Java 缓存 API,允许开发人员从缓存临时存储、检索、更新和删除对象。 Redisson 提供了 Redis 的 JCache API 实现。 下面是在 Redisson 中使用默认配置调用 JCache API 的示例: MutableConfiguration<String, String> config = new MutableConfiguration getCacheManager(); Cache<String, String> cache = manager.createCache("namedCache", config); Redisson 的 JCache 实现已经通过 JCache TCK 的所有测试。
JCache ---- 为什么要在 Java 分布式应用程序中使用缓存? 在提高应用程序速度和性能上,每一毫秒都很重要。 下一节将讨论 Redisson 中分布式缓存的三个重要实现:Maps、Spring Cache 和 JCache。 1. JCache JCache 是一个 Java 缓存 API,允许开发人员从缓存临时存储、检索、更新和删除对象。 Redisson 提供了 Redis 的 JCache API 实现。 getCacheManager(); Cache<String, String> cache = manager.createCache("namedCache", config); Redisson 的 JCache 实现已经通过 JCache TCK 的所有测试。
通过JCache API来使用Ehcache 依赖集成与配置 如果要使用JCache标准方式来使用,需要额外引入JCache对应依赖包: <dependency> <groupId>javax.cache 其实原理很简单,之前介绍JCache API的文章中也有解释过。 作为通用规范,JCache仅定义了所有缓存实现者需要实现的功能的最小集,而Ehcache除了JCache提供的最低限度缓存功能外,还有很多其余缓存不具备的增强特性。 这个方案也即目前比较常用的"SpringBoot + JCache + Ehcache"组合模式。 spring.cache.type=jcache spring.cache.jcache.config=.
但是奈何Spring并没有提供内置的CacheManager对3.x提供支持,因此此处我总结继承它的两种方案: 自己实现CacheManager和Cache等相关规范接口 使用JSR107的JCache :jcache+EhCache3.x来实现对Spring的整合。 = cacheManager.getCache(cacheName); caches.add(new JCacheCache(jcache, isAllowNullValues())); } ) javax.cache.Cache<Object, Object> jcache = cacheManager.getCache(name); if (jcache ! = null) { return new JCacheCache(jcache, isAllowNullValues()); } return null; } } 由此可见,实际上JCache
key, value); } public Object get(Object key) { return store.get().get(key); } } JCache 类实现 public class JCache implements com.alibaba.dubbo.cache.Cache { private final Cache<Object, Object > store; public JCache(URL url) { String method = url.getParameter(Constants.METHOD_KEY, cache对象 String key = url.getAddress() + "." + url.getServiceKey() + "." + method; // jcache 为SPI实现的全限定类名 String type = url.getParameter("jcache"); //通过CachingProvider
hibernate-vibur 整合 Vibur DBCP 连接池库到 Hibernate hibernate-proxool 整合 Proxool 连接池库到 Hibernate hibernate-jcache 整合 JCache 缓存特性到 Hibernate,使任何与其兼容的缓存实现能够成为 Hibernate 二级缓存的提供者 hibernate-ehcache 整合 Ehcache 缓存库到 Hibernate
hibernate-vibur 整合 Vibur DBCP 连接池库到 Hibernate hibernate-proxool 整合 Proxool 连接池库到 Hibernate hibernate-jcache 整合 JCache 缓存特性到 Hibernate,使任何与其兼容的缓存实现能够成为 Hibernate 二级缓存的提供者 hibernate-ehcache 整合 Ehcache 缓存库到 Hibernate
JSR107缓存抽象:JCache 说起JSR107或者说是JCache,估摸大多数小伙伴都会觉得非常的陌生,没用过且还没听过。 若要使用JCache,首先我们得额外导包(API包): <dependency> <groupId>javax.cache</groupId> <artifactId>cache-api JCache的实现产品挺少的,Ehcache3.x有实现JSR107相关规范接口 它的核心类的层次结构图: ? 缓存有效期可以通过ExpiryPolicy设置 说实话,我个人认为JCache的这个设计太大而全了,导致我们使用它的复杂度是非常高的,因此难以流行起来。 总结 本文介绍了JSR107的缓存抽象JCache的概念和设计,以及重点介绍了Spring对缓存的抽象,希望各位看官在实操过程中,也需要注重一定概念性东西,更需要关注一下业界规范。
4.1.2 4.5.3 hessian等用http连接池 validator 1.0.0 1.1.0.Final java validation规范 cxf 2.6.1 3.0.14 webservice jcache 0.4 1.0.0 jcache规范 一些maven插件、测试依赖升级待整理。
使用 Google Guava 的 GuavaCache 作为缓存技术 HazelcastCacheManager 使用 Hazelcast 作为缓存技术 JCacheCacheManager 支持 JCache 例如: spring.cache.type= # 可选 generic、ehcache、hazelcast、infinispan、jcache、redis、guava、simple、none spring.cache.cache-names spring.cache.hazelcast.config= # hazelcast配置文件的地址 spring.cache.infinispan.config= # infinispan配置文件的地址 spring.cache.jcache.config = # jcache配置文件的地址 spring.cache.jcache.provider= # 当多个 jcache 实现在类路径的时候,指定 jcache 实现 # 等等。。。
<dependency> <groupId>com.github.ben-manes.caffeine</groupId> <artifactId>jcache dependency> <groupId>com.github.vladimir-bukhtoyarov</groupId> <artifactId>bucket4j-jcache
Spring缓存抽象同时支持JCache的注解来简化开发,JCache也是一套规范。 JCache 定义了5个核心接口,分别是: CachingProvider:定义了创建、配置、获取、管理和控制多特CacheManager,一个应用在运行期间可以访问多个CachingProvider 如果有就直接从缓存中获取方法调用后的结果,如果没有就调用目标方法并缓存结果后返回给用户,下次再次调用的时候直接从缓存中获取 You can also use the standard JSR-107 (JCache However, we strongly advise you to not mix and match the Spring Cache and JCache annotations. Spring Boot 官方建议不要混用 Spring Cache 和 JCache 的注解 工程搭建与测试 创建spring boot工程spring-boot-cache 根据SQL文件新建tesla
SpringBootCache源码解析 Spring Boot 支持了多种缓存的自动配置,其中包括 Generic、JCache、EhCache 2.x、Hazelcast、 Infinispan、 SimpleCacheManager 、 基 于 ConcurrentHashMap 实 现 的 Concurrent-MapCacheManager、基于 EhCache 实现的 EhCacheCacheManager 和基于JCache //支持的缓存类型(按照优先级定义) public enum CacheType { //使用上下文中的 Cache Bean 进行通用缓存 GENERIC, // JCache(JSR- 107) 支持的缓存 JCACHE, // EhCache 支持的缓存 EHCACHE, // Hazelcast 支持的缓存 HAZELCAST, // Infinispan 支持的缓存 INFINISPAN, // Couchbase JCACHE, JCacheCacheConfiguration. class); mappings . put (CacheType .
tags: redis,ehcahe,jcache,memcache 缓存机制的引入可以提高系统的访问效率。 对于单机推荐使用 ehcahe 对于分布式 推荐使用 redis 和 MemCached; SpringBoot支持很多种缓存方式:redis、guava、ehcahe、jcache等等。