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或更高版本应该会得到一致的系统/nanoTime。这比System/currentTimeMillis有巨大的改进,后者在没有JVM或OS错误的情况下可能会不一致(对于TTL目的)。

我接受任何解决方案,只是分享数据。
谢谢,John。我会在回到核心.cache工作时要通读这一切。
...