我在Spring和EhCache中使用JCache注释。如果我在方法上使用@CacheResult而不指定缓存名称(或类上的@CacheDefaults),则默认缓存名称将解析为标准方法名称。但是,除非使用CacheManager显式创建,否则找不到此类缓存。对于一些这样的启用缓存的方法,这可能是可管理的,但是如果我必须手动创建50个不同的缓存,则无法管理。
是否有一种方法可以告诉Spring(或任何JCache实现者)使用默认名称自动创建缓存(如果找不到)?这样一来,我就可以在任何方法上使用@CacheResult,而不必每次都更新缓存配置。
答案 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的重度用户,但是,如果有任何问题,我很乐意为您提供帮助。