【发布时间】:2018-11-16 09:06:43
【问题描述】:
我有 2 个 node.js 网络服务器。我在网络服务器中缓存数据。我根据系统时间同步缓存加载/清除。我已经完成了所有主机的时间同步。
现在我使用以下代码每 15 分钟清除一次缓存:
millisTillNexthour = "Calculate millis remaining until next hour"
setTimeout(function() {
setInterval(function() {
cache.clear();
}, 60000*15);
}, millisTillNexthour);
我的期望是,即使这个过程永远运行,缓存也会在一天中的每个小时的第 15 分钟被清除一次。
我的问题是:setInterval 会随时间漂移吗?
例如:现在它清除10:00 10:15 10:30 10:45 11:00 ......的缓存
是否会发生 setInterval 不是 10:15 系统时间,而是在 10:20 系统时间执行,而它应该在 10:15 清除缓存??
我不确定这是如何工作的。请阐明一些观点。我希望我能很好地解释我的问题。
【问题讨论】:
-
除非有其他东西阻止了它的执行,否则它应该尽可能靠近
:15执行,尽快 -
理论上没有。
setInterval专门设计用于解决使用setTimeout调用自身(并且会漂移)所带来的问题。然而,伊恩是对的;如果在它应该运行回调的时候有什么东西阻塞了它 5 分钟,它在阻塞解除之前不会运行。不要依赖它进行金融交易或核威慑。
标签: javascript node.js