我在Spring和EhCache中使用JCache注解。如果我在没有指定缓存名称的方法上使用@CacheResult (或者在类上使用@CacheDefaults ),那么默认的缓存名称将解析为完全限定的方法名称。但是,除非使用CacheManager显式创建,否则将找不到这样的缓存。对于一些这样的启用缓存的方法,这可能是可管理的,但如果我必须手动创建50个不同的缓存,则不能。
有没有办法告诉Spring (或任何JCache实现者)在找不到缓存时自动创建默认名称的缓存?这将允许我在任何方法上使用@CacheResult,而不必每次都去更新缓存配置。
发布于 2019-07-09 18:01:33
有没有办法告诉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的重度用户,但是如果有任何问题,我很乐意为您提供帮助。
https://stackoverflow.com/questions/56933656
复制相似问题