JCache CacheResult-使用默认名称创建缓存

时间:2019-07-08 11:10:26

标签: jcache

我在Spring和EhCache中使用JCache注释。如果我在方法上使用@CacheResult而不指定缓存名称(或类上的@CacheDefaults),则默认缓存名称将解析为标准方法名称。但是,除非使用CacheManager显式创建,否则找不到此类缓存。对于一些这样的启用缓存的方法,这可能是可管理的,但是如果我必须手动创建50个不同的缓存,则无法管理。

是否有一种方法可以告诉Spring(或任何JCache实现者)使用默认名称自动创建缓存(如果找不到)?这样一来,我就可以在任何方法上使用@CacheResult,而不必每次都更新缓存配置。

1 个答案:

答案 0 :(得分:0)

  

是否有一种方法可以告诉Spring(或任何JCache实现者)使用默认名称自动创建缓存(如果找不到)?

cache2k中涵盖了此问题。如果请求的缓存名称未知,则可以将cache2k配置为使用默认配置。

以下是此方案的XML配置示例,它位于类路径的/cache2k.xml中:

<cache2k xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance'
         xmlns='https://cache2k.org/schema/v1.x'
         xsi:schemaLocation="https://cache2k.org/schema/v1.x https://cache2k.org/schema/cache2k-core-v1.x.xsd">
  <version>1.0</version>
  <ignoreMissingCacheConfiguration>true</ignoreMissingCacheConfiguration>
  <defaults>
    <!-- default settings for every cache -->
    <cache>
      <entryCapacity>100_000</entryCapacity>
      <expireAfterWrite>5m</expireAfterWrite>
    </cache>
  </defaults>
  <templates>
    <cache>
      <name>shortExpiry</name>
      <expireAfterWrite>5m</expireAfterWrite>
    </cache>
    <cache>
      <name>lessResilient</name>
      <resilienceDuration>1m</resilienceDuration>
    </cache>
  </templates>
  <caches>
    <cache>
      <name>products</name>
      <entryCapacity>10_000</entryCapacity>
      <include>shortExpiry,lessResilient</include>
    </cache>
    <cache>
      <name>users</name>
      <entryCapacity>1000</entryCapacity>
      <include>shortExpiry</include>
    </cache>
  </caches>
</cache2k>

默认情况下,根据此配置,没有特定配置条目的缓存将获得100K条目限制和5分钟的到期时间。该配置可能适用于生产中的路径。稍后,您或系统操作员可以通过JMX检查现有的缓存及其性能,然后在需要时立即添加更具体的缓存配置。如果您有许多缓存,则该配置具有模板机制来避免重复。

可能会发生,缓存需要预先进行特定的配置,而有些则不需要。我建议将它们分成不同的缓存管理器。

如果需要进程内高速缓存,cache2k是EHCache的很好替代。它的速度更快,内存使用效率更高。

您可以通过JCache使用cache2k,但是也直接支持Spring框架。有关详细信息,请参见User Guide Spring Framework Section

我是cache2k的作者,目前不是Spring的重度用户,但是,如果有任何问题,我很乐意为您提供帮助。