配置缓存存储

缓存抽象提供了多个存储集成选项。要使用它们,您需要 声明适当的CacheManager(控制和管理Cache实例,可用于检索这些实例进行存储)。spring-doc.cadn.net.cn

JDKConcurrentMap基于 缓存

基于 JDK 的Cacheimplementation 位于org.springframework.cache.concurrent包。它允许您使用ConcurrentHashMap作为背衬Cache商店。以下示例演示如何配置两个缓存:spring-doc.cadn.net.cn

@Bean
ConcurrentMapCacheFactoryBean defaultCache() {
	ConcurrentMapCacheFactoryBean cache = new ConcurrentMapCacheFactoryBean();
	cache.setName("default");
	return cache;
}

@Bean
ConcurrentMapCacheFactoryBean booksCache() {
	ConcurrentMapCacheFactoryBean cache = new ConcurrentMapCacheFactoryBean();
	cache.setName("books");
	return cache;
}

@Bean
CacheManager cacheManager(ConcurrentMapCache defaultCache, ConcurrentMapCache booksCache) {

	SimpleCacheManager cacheManager = new SimpleCacheManager();
	cacheManager.setCaches(Set.of(defaultCache, booksCache));
	return cacheManager;
}

前面的代码段使用SimpleCacheManager要创建一个CacheManager对于 两个嵌套ConcurrentMapCache名为defaultbooks.请注意, 名称是直接为每个缓存配置的。spring-doc.cadn.net.cn

由于缓存是由应用程序创建的,因此它与它的生命周期绑定,使其成为 适用于基本用例、测试或简单应用程序。缓存扩展性良好 并且速度非常快,但是它不提供任何管理、持久化功能, 或驱逐合同。spring-doc.cadn.net.cn

基于 Ehcache 的缓存

Ehcache 3.x 完全符合 JSR-107 标准,不需要专门的支持。有关详细信息,请参阅 JSR-107 Cachespring-doc.cadn.net.cn

咖啡因缓存

Caffeine 是 Guava 缓存的 Java 8 重写版,其实现位于org.springframework.cache.caffeine包并提供对多种功能的访问 咖啡因。spring-doc.cadn.net.cn

以下示例将CacheManager这将按需创建缓存:spring-doc.cadn.net.cn

@Bean
CacheManager cacheManager() {
	return new CaffeineCacheManager();
}

您还可以提供要显式使用的缓存。在这种情况下,只有那些 由 Manager 提供。以下示例显示了如何执行此作:spring-doc.cadn.net.cn

@Bean
CacheManager cacheManager() {
	CaffeineCacheManager cacheManager = new CaffeineCacheManager();
	cacheManager.setCacheNames(List.of("default", "books"));
	return cacheManager;
}

咖啡因CacheManager还支持自定义CaffeineCacheLoader. 有关这些内容的更多信息,请参阅 Caffeine 文档spring-doc.cadn.net.cn

基于 GemFire 的缓存

GemFire 是一种面向内存、磁盘支持、弹性可扩展、持续可用的 GemFire 活动(具有内置的基于模式的订阅通知),全局复制 数据库并提供功能齐全的边缘缓存。有关如何 将 GemFire 用作CacheManager(以及更多内容),请参阅 Spring Data GemFire 参考文档spring-doc.cadn.net.cn

JSR-107 缓存

Spring 的缓存抽象也可以使用符合 JSR-107 的缓存。The JCache implementation 位于org.springframework.cache.jcache包。spring-doc.cadn.net.cn

同样,要使用它,您需要声明适当的CacheManager. 以下示例显示了如何执行此作:spring-doc.cadn.net.cn

@Bean
javax.cache.CacheManager jCacheManager() {
	CachingProvider cachingProvider = Caching.getCachingProvider();
	return cachingProvider.getCacheManager();
}

@Bean
org.springframework.cache.CacheManager cacheManager(javax.cache.CacheManager jCacheManager) {
	return new JCacheCacheManager(jCacheManager);
}

在没有后备存储的情况下处理缓存

有时,在切换环境或执行测试时,您可能有缓存 声明,而无需配置实际的后备缓存。由于这是无效的 配置,则在运行时会引发异常,因为缓存基础设施 找不到合适的商店。在这种情况下,与其删除 cache 声明(这可能很乏味),您可以连接一个简单的虚拟缓存,该 不执行缓存 — 也就是说,它强制每次都调用缓存的方法。 以下示例显示了如何执行此作:spring-doc.cadn.net.cn

@Bean
CacheManager cacheManager(CacheManager jdkCache, CacheManager gemfireCache) {
	CompositeCacheManager cacheManager = new CompositeCacheManager();
	cacheManager.setCacheManagers(List.of(jdkCache, gemfireCache));
	cacheManager.setFallbackToNoOpCache(true);
	return cacheManager;
}

CompositeCacheManager在前面的链中 multipleCacheManager实例和 通过fallbackToNoOpCache标志,为所有定义添加一个 no-op 缓存,而不是 由配置的缓存管理器处理。也就是说,在 也jdkCachegemfireCache(在示例前面配置)由 no-op 缓存,它不存储任何信息,导致 Target 方法 每次调用。spring-doc.cadn.net.cn


APP信息