You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Ehcache 3及以上版本如何实现动态配置,替代v2的dynamicConfig属性

Ehcache 3 动态配置实现方案

Ehcache 3 版本已经移除了 v2 版本的 dynamicConfig 开关属性,默认支持运行时动态修改可调整的缓存参数,不需要在XML配置文件中额外添加属性开启。

可动态修改的参数范围

仅支持修改缓存运行时可调参数,不可变参数修改需要销毁重建缓存:

  • 可调参数:TTL过期时间、堆/堆外/磁盘的资源容量阈值
  • 不可调参数:缓存别名、键值类型、持久化配置、监听器配置、序列化策略等

具体实现步骤(Java API)

通过XML配置初始化的缓存,可以直接通过Ehcache提供的运行时API修改配置,示例代码如下:

1. 获取CacheManager和目标缓存实例

import org.ehcache.Cache;
import org.ehcache.CacheManager;
import org.ehcache.config.CacheRuntimeConfiguration;
import org.ehcache.config.builders.ExpiryPolicyBuilder;
import org.ehcache.config.builders.ResourcePoolsBuilder;
import org.ehcache.core.config.ExpiryPolicyConfiguration;
import org.ehcache.expiry.ExpiryPolicy;
import java.time.Duration;

// 此处替换为你项目中初始化完成的CacheManager实例
CacheManager cacheManager = ...; 
Cache<Object, Object> categoriesCache = cacheManager.getCache("categoriesCache", Object.class, Object.class);
CacheRuntimeConfiguration<Object, Object> runtimeConfig = categoriesCache.getRuntimeConfiguration();

2. 动态修改TTL过期时间

// 把categoriesCache的过期时间修改为1800秒
runtimeConfig.updateExpiry(ExpiryPolicyBuilder.timeToLiveExpiration(Duration.ofSeconds(1800)));

3. 动态修改缓存资源容量

// 把堆容量调整为2000条,堆外调整为20MB,磁盘调整为50MB
runtimeConfig.updateResourcePools(
    ResourcePoolsBuilder.newResourcePoolsBuilder()
        .heap(2000)
        .offheap(20, MemoryUnit.MB)
        .disk(50, MemoryUnit.MB, true)
        .build()
);

注意事项

  • 调整资源容量时,新的容量不能小于当前已使用的容量,否则会调整失败
  • 如果需要修改不可变参数,需要先调用 cacheManager.removeCache("缓存别名") 销毁原有缓存,再用新的配置重新注册缓存即可

内容的提问来源于stack exchange,提问作者gheontreyjoy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 03:45:03