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 缓存。

by
同意,由于两个定时器都有利有弊,因此最佳选择是使用 System/nanoTime 添加一种新的 TTL 缓存类型。
by
编辑 by
geeksforgeeks 链接中似乎有过时信息。其他来源,如 https://stackoverflow.com/a/4588605https://stackoverflow.com/a/54566928,有更多信息。运行修补过的 Java 8 或更高版本应在 (希望如此) 导致一致的 System/nanoTime。这比 System/currentTimeMillis 有很大改进,后者可以不依赖 JVM 或 OS 错误而不一致(对于 TTL 目的)。

我对任何一种解决方案都可以接受,只是分享数据。
by
谢谢,John。我回去处理 core.cache 相关工作时会阅读所有这些内容。
...