欢迎!请参阅 关于 页面了解如何使用本站的相关信息。
TTLCacheQ 是基于 System/currentTimeMillis 构建的,它不是单调的,缓存的行为可能会受到时钟调整(例如 NTP)的影响。我的建议是将其改为 System/nanoTime,它单调,因此可以更一致地计算经过的时间。
System/currentTimeMillis
System/nanoTime
如果希望这个时钟调整影响 TTL 缓存,可能需要将其变成另一种具有相关行为文档的缓存策略。
附言:我已经创建了一个 .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 缓存类型,而不是切换当前实现。