首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >JCache CacheResult -使用默认名称创建缓存

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

Stack Overflow用户
提问于 2019-07-08 19:10:27
回答 1查看 178关注 0票数 1

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

有没有办法告诉Spring (或任何JCache实现者)在找不到缓存时自动创建默认名称的缓存?这将允许我在任何方法上使用@CacheResult,而不必每次都去更新缓存配置。

EN

回答 1

Stack Overflow用户

发布于 2019-07-09 18:01:33

有没有办法告诉Spring (或任何JCache实现者)在找不到缓存时,自动创建默认名称的缓存?

这个问题在cache2k中有介绍。如果请求的缓存名称未知,您可以将cache2k配置为使用默认配置。

以下是此场景的示例XML配置,它被放置在类路径中的/cache2k.xml

代码语言:javascript
运行
复制
<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的重度用户,但是如果有任何问题,我很乐意为您提供帮助。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56933656

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档