gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 09:32:21 30 4
gpt4 key购买 nike

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

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

最佳答案

Is there a way to tell Spring (or any JCache implementer) to automatically create caches with the default name, if not found?

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 分钟到期时间。该配置可能适合生产中的跟踪。稍后,您或系统运算符(operator)可以通过 JMX 检查现有的缓存及其性能,然后在需要时添加更具体的缓存配置。如果你有很多缓存,配置有模板机制以避免重复。

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

如果您需要进程内缓存,cache2k 是 EHCache 的一个很好的替代方案。它速度更快,内存效率更高。

您可以通过 JCache 使用cache2k,但是也有直接的 Spring 框架支持。请参阅User Guide Spring Framework Section了解详情。

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

关于java - JCache CacheResult - 使用默认名称创建缓存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56933656/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com