欢迎!请查看关于页面以了解更多关于它是如何工作的信息。
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 缓存,而不是切换当前实现。