欢迎!请访问关于 页面以获取更多关于此工作方式的信息。
TTLCacheQ 建立在 System/currentTimeMillis 之上,该函数不是单调的,因此缓存的行为可能受到时钟调整(例如 NTP)的影响。我的建议是将其更改为 System/nanoTime,这是单调的,因此在计算经过时间时更加一致。
System/currentTimeMillis
System/nanoTime
如果希望对 ttl 缓存产生这种时钟调整效果,那么它可能应该成为一种具有关于此行为的文档的另一种缓存策略。
PS:我已经创建了一个用于修复此问题的补丁,签署了 CA,但不知道在哪里申请 JIRA 账户以打开问题。
这让我对直接切换到 nanoTime 有些担忧 https://www.geeksforgeeks.org/java-system-nanotime-vs-system-currenttimemillis/,但我理解为什么在某些边缘情况中也可能出现使用 currentTimeMillis 的问题。
nanoTime
currentTimeMillis
我已经为这个问题创建了 https://clojure.atlassian.net/browse/CCACHE-62,但在采取任何行动之前需要仔细分析。一种合理的方法可能是添加一种新的基于 nanoTime 而不是 currentTimeMillis 的新型 TTL 缓存,而不是切换当前实现。