欢迎!有关如何使用此服务的更多信息,请参阅关于页面。
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 缓存。