对于最新的稳定版本,请使用 Spring Framework 6.2.10! |
配置缓存存储
缓存抽象提供了多个存储集成选项。要使用它们,您需要
声明适当的CacheManager
(控制和管理的实体Cache
实例,可用于检索这些实例进行存储)。
JDK的ConcurrentMap
基于缓存
基于 JDK 的Cache
实现驻留在org.springframework.cache.concurrent
包。它允许您使用ConcurrentHashMap
作为后盾Cache
商店。以下示例显示了如何配置两个缓存:
<!-- simple cache manager -->
<bean id="cacheManager" class="org.springframework.cache.support.SimpleCacheManager">
<property name="caches">
<set>
<bean class="org.springframework.cache.concurrent.ConcurrentMapCacheFactoryBean" p:name="default"/>
<bean class="org.springframework.cache.concurrent.ConcurrentMapCacheFactoryBean" p:name="books"/>
</set>
</property>
</bean>
前面的代码段使用SimpleCacheManager
创建CacheManager
对于
两个嵌套的ConcurrentMapCache
名为default
和books
.请注意,
名称直接为每个缓存配置。
由于缓存是由应用程序创建的,因此它与其生命周期绑定,使其 适用于基本用例、测试或简单应用程序。缓存扩展良好 并且速度非常快,但它不提供任何管理、持久化能力、 或驱逐合同。
基于 Ehcache 的缓存
Ehcache 3.x 完全符合 JSR-107 标准,不需要专门的支持。有关详细信息,请参阅 JSR-107 缓存。
咖啡因缓存
Caffeine 是 Guava 缓存的 Java 8 重写,其实现位于org.springframework.cache.caffeine
打包并提供对多个功能的访问
咖啡因。
以下示例配置CacheManager
按需创建缓存:
<bean id="cacheManager"
class="org.springframework.cache.caffeine.CaffeineCacheManager"/>
您还可以提供要显式使用的缓存。在这种情况下,只有那些 由经理提供。以下示例显示了如何执行此作:
<bean id="cacheManager" class="org.springframework.cache.caffeine.CaffeineCacheManager">
<property name="cacheNames">
<set>
<value>default</value>
<value>books</value>
</set>
</property>
</bean>
咖啡因CacheManager
还支持自定义Caffeine
和CacheLoader
.
有关这些的更多信息,请参阅 Caffeine 文档。
基于 GemFire 的缓存
GemFire 是一种面向内存、磁盘支持、弹性可扩展、持续可用、
活动(具有内置的基于模式的订阅通知),全局复制
数据库,并提供功能齐全的边缘缓存。有关如何作的更多信息
使用 GemFire 作为CacheManager
(以及更多),请参阅 Spring Data GemFire 参考文档。
JSR-107 缓存
Spring 的缓存抽象还可以使用符合 JSR-107 的缓存。The JCache
实现位于org.springframework.cache.jcache
包。
同样,要使用它,您需要声明适当的CacheManager
.
以下示例显示了如何执行此作:
<bean id="cacheManager"
class="org.springframework.cache.jcache.JCacheCacheManager"
p:cache-manager-ref="jCacheManager"/>
<!-- JSR-107 cache manager setup -->
<bean id="jCacheManager" .../>
处理没有后备存储的缓存
有时,在切换环境或进行测试时,您可能有缓存 声明,而无需配置实际的后备缓存。因为这是一个无效的 配置时,运行时会抛出异常,因为缓存基础设施 找不到合适的店铺。在这种情况下,与其删除 cache 声明(这可能被证明是乏味的),你可以连接一个简单的虚拟缓存,其中 不执行缓存 — 也就是说,它强制每次都调用缓存的方法。 以下示例显示了如何执行此作:
<bean id="cacheManager" class="org.springframework.cache.support.CompositeCacheManager">
<property name="cacheManagers">
<list>
<ref bean="jdkCache"/>
<ref bean="gemfireCache"/>
</list>
</property>
<property name="fallbackToNoOpCache" value="true"/>
</bean>
这CompositeCacheManager
在前面的链中,多个CacheManager
实例和,
通过fallbackToNoOpCache
标志,为所有定义添加一个无作缓存,而不是
由配置的缓存管理器处理。也就是说,在
也jdkCache
或gemfireCache
(在示例前面配置)由no-op 缓存处理,它不存储任何信息,导致目标方法每次都被调用。