Mule 4缓存过期机制确认及Token缓存配置咨询
Mule 4缓存过期机制问题及Token缓存配置疑问
我在实现中需要调用一个依赖Token的API,该Token有效期为15分钟。原本计划配置内存缓存,让缓存13分钟后过期,过期后重新生成Token并存入缓存。
创建Token的子流配置
<sub-flow name="common-root-get-access-token-subflow"> <ee:cache doc:name="access token cache" cachingStrategy-ref="Token_Caching_Strategy"> <flow-ref doc:name="Call token endpoint" name="create token" /> </ee:cache> <set-variable value="#[payload.access_token]" doc:name="assign access token" variableName="rootAccessToken" /> </sub-flow>
缓存策略定义
<ee:object-store-caching-strategy name="Token_Caching_Strategy" doc:name="Caching Strategy" keyGenerationExpression="abcd"> <os:private-object-store alias="tokenCache" persistent="false" maxEntries="1" entryTtl="13" entryTtlUnit="MINUTES" expirationInterval="13" expirationIntervalUnit="MINUTES"/> </ee:object-store-caching-strategy>
观测到的现象
- #1 缓存似乎在23分钟后而非13分钟后过期。参考资料后,我认为缓存时长为13分钟TTL + 13分钟间隔=26分钟,但实际观测为23分钟。
- #2 尝试设置ttl=3分钟,interval=2分钟,缓存每4分钟过期一次。推测因首次2分钟检查时缓存未过期,第二次2分钟检查(即第4分钟)时缓存已过期,故执行清理。
- #3 尝试设置ttl=3分钟,interval=1分钟,缓存每4分钟过期一次。推测缓存实际生命周期为3分钟,但检查间隔为1分钟,第3分钟时检查未触发清理,直到下一次检查(第4分钟)才清理。
- #4 尝试设置ttl=3分钟,interval=3分5秒,缓存每6分5秒过期,而非预期的3分5秒。
- #5 尝试设置ttl=3分钟,interval=1分5秒,缓存符合预期,约每3分钟5-15秒后过期。
我的理解
TTL定义缓存的实际生命周期,但缓存的实际过期时间由设置的expirationInterval决定。#5、#1、#2、#3均符合此理解,但#4为例外,原因不明。有资料指出缓存会在TTL+interval后过期。
我的环境为Mule 4.4.6运行时(Java 8)、Studio 7.16。现需确认:
- Mule 4缓存的实际过期机制;
- 若Token有效期为15分钟,能否通过设置TTL=12分30秒、expirationInterval=1分钟,实现缓存13分钟后过期?
Edit1
已启用缓存调试日志,但未观测到预期的后台清理线程日志(类似垃圾回收线程,按指定间隔运行并判断缓存是否需过期)。
内容的提问来源于stack exchange,提问作者boomslaw
相关产品推荐
相关产品推荐

