有没有办法告诉 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 的重度用户,但是,如果有任何问题,我很乐意提供帮助。