005-spring cache-配置缓存存储

一、概述

  缓存抽象提供了多种存储集成。要使用它们,需要简单地声明一个适当的CacheManager - 一个控制和管理Caches的实体,可用于检索这些实体以进行存储。

1.1、基于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为名为default和books的两个嵌套的ConcurrentMapCache实例创建一个CacheManager。请注意,名称是针对每个缓存直接配置的。

  由于缓存是由应用程序创建的,因此它被绑定到其生命周期,使其适用于基本用例,测试或简单应用程序。缓存很好地扩展,速度非常快,但它不提供任何管理或持久性功能,也不提供驱逐合同。

1.2、基于Ehcache的缓存

  注意:Ehcache 3.x完全兼容JSR-107,并且不需要专门的支持。

  对于2.x:Ehcache 2.x实现位于org.springframework.cache.ehcache包下。同样,要使用它,只需要声明适当的CacheManager:

<bean id="cacheManager"
        class="org.springframework.cache.ehcache.EhCacheCacheManager" p:cache-manager-ref="ehcache"/>

<!-- EhCache library setup -->
<bean id="ehcache"
        class="org.springframework.cache.ehcache.EhCacheManagerFactoryBean" p:config-location="ehcache.xml"/>

  这个设置引导了Spring IoC中的ehcache库(通过ehcache bean),然后将它连接到专用的CacheManager实现中。请注意,整个ehcache特定配置是从ehcache.xml中读取的。

1.3、Caffeine缓存

  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="caches">
        <set>
            <value>default</value>
            <value>books</value>
        </set>
    </property>
</bean>

1.4、基于GemFire的缓存

  GemFire是一款面向内存/磁盘备份,可弹性扩展,持续可用,活动(具有内置基于模式的订阅通知),全球复制的数据库并提供全功能的边缘缓存。有关如何将GemFire用作CacheManager(以及更多)的更多信息,请参阅Spring Data GemFire参考文档。

1.5、JSR-107 Cache

  Spring的缓存抽象也可以使用兼容JSR-107的缓存。 JCache实现位于org.springframework.cache.jcache包下。

<bean id="cacheManager"
        class="org.springframework.cache.jcache.JCacheCacheManager"
        p:cache-manager-ref="jCacheManager"/>

<!-- JSR-107 cache manager setup  -->
<bean id="jCacheManager" .../>

1.6、处理没有后台存储的缓存

  有时在切换环境或进行测试时,可能会有缓存声明而没有配置实际的后备缓存。由于这是一个无效的配置,因此在运行时将会抛出异常,因为高速缓存基础结构无法找到合适的存储。在这种情况下,而不是删除缓存声明(这可能很乏味),可以在一个简单的虚拟缓存中进行连接,该缓存不执行缓存 - 也就是强制每次都执行缓存的方法:

<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链接多个CacheManagers,另外还通过fallbackToNoOpCache标志添加了一个无操作缓存,该缓存对于未由所配置的缓存管理器处理的所有定义。也就是说,在jdkCache或gemfireCache(以上配置)中找不到的每个缓存定义都将由no op缓存处理,该缓存不会存储任何导致每次都要执行的目标方法的信息。

二、插入不同的后端缓存

显然有很多缓存产品可以用作后备存储。为了插入它们,需要提供CacheManager和Cache实现,因为不幸的是,我们没有可用的标准。这听起来可能听起来很难,因为在实践中,这些类往往是简单的适配器,可以将缓存抽象框架映射到存储API的顶层,就像ehcache类可以显示的一样。大多数CacheManager类可以使用org.springframework.cache.support包中的类,例如AbstractCacheManager,它负责处理boiler-plate代码,只留下实际的映射。

三、如何设置TTL / TTI /驱逐策略/ XXX功能?

  直接通过您的缓存提供商。抽象不是缓存实现。您正在使用的解决方案可能支持各种数据策略和其他解决方案不支持的不同拓扑(例如,使用JDK ConcurrentHashMap)暴露在缓存抽象中是无用的,因为没有后援支持。这些功能应通过支持缓存直接控制,配置时或通过其本地API。

 

转载于:https://www.cnblogs.com/bjlhx/p/9168078.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值