2024年Clojure状态调查中分享您的想法!

欢迎!请查看关于页面以了解更多关于它是如何工作的信息。

+2
core.cache

TTLCacheQ 位于System/currentTimeMillis之上,该值不是单调的,因此缓存的行为可能受时钟调整(例如 NTP)的影响。我的建议是将其更改为System/nanoTime,它单调且有助于更一致地计算经过时间。

如果希望对 TTL 缓存的时间调整效果,也许它应该成为另一种具有文档说明此行为的缓存策略。

PS:我已经创建了一个补丁来修复这个问题,签了 CA 但不知道在哪里申请 JIRA 账户以打开一个问题。

1 答案

0

这让我有点担心直接切换到 nanoTime https://www.geeksforgeeks.org/java-system-nanotime-vs-system-currenttimemillis/,但我理解在某些边缘情况下为什么使用 currentTimeMillis 也可能是个问题。

我已经创建了https://clojure.atlassian.net/browse/CCACHE-62来处理这个问题,但在采取任何行动之前需要仔细分析。一种合理的做法可能是添加一种基于使用 nanoTime 而不是 currentTimeMillis 的新类型 TTL 缓存,而不是切换当前实现。

同意,由于两个定时器各有优缺点,使用System/nanoTime添加另一种类型的TTL缓存将是最佳选择。

编辑
那个geeksforgeeks链接似乎有陈旧的信息。其他来源如https://stackoverflow.com/a/4588605https://stackoverflow.com/a/54566928有更多细节。看来运行修补后的Java 8或更高版本应该会得到一致的System/nanoTime。这比System/currentTimeMillis有了很大改进,后者在没有JVM或OS错误的情况下可能会不一致(对于TTL目的)。

我对于任何解决方案都可以接受,只是在分享数据。
谢谢,John。我会在回到核心.cache部分工作的时候阅读所有的这些内容。
...