欢迎!请查看关于页面以了解更多有关如何操作的信息。
TTLCacheQ 是基于 System/currentTimeMillis 构建的,它不是单调的,缓存的行为可能会受到时钟调整(例如 NTP)的影响。我的建议是将其更改为 System/nanoTime,它是单调的,因此计算经过时间更一致。
System/currentTimeMillis
System/nanoTime
如果希望对 ttl 缓存产生这种时钟调整效果,可能应该将其变成另一种缓存策略,并对这种行为进行说明。
PS:我已经创建了一个 .patch 来修复这个问题,已经签名了 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 缓存,而不是切换当前实现。