欢迎!请查看关于页面,了解更多关于该功能的信息。
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缓存,而不是切换当前实现。