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

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

+2
core.cache

TTLCacheQ 是基于 System/currentTimeMillis 构建的,它不是单调的,缓存的行为可能会受到时钟调整(例如 NTP)的影响。我的建议是将其更改为 System/nanoTime,它是单调的,因此计算经过时间更一致。

如果希望对 ttl 缓存产生这种时钟调整效果,可能应该将其变成另一种缓存策略,并对这种行为进行说明。

PS:我已经创建了一个 .patch 来修复这个问题,已经签名了 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。我回去处理core.cache时,将通读所有这些内容。
...