我有两个Node.js Web服务器。我在Web服务器内部缓存数据。我根据系统时间同步缓存加载/清除。我已经对所有主机进行了时间同步。
现在,我使用以下代码每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 ......
清除缓存。
但是,可能会发生这种情况吗?当应该在10:15清除缓存时,setInterval函数在系统时间10:20执行?
我不确定这是怎么回事,希望您能给予解答。谢谢!
:15
执行,但不要过早执行。 - IansetInterval
的设计正是为了解决使用setTimeout
调用自身(并且会漂移)所带来的问题。然而,Ian 是正确的;如果某些东西在它应该运行回调时阻塞了它 5 分钟,它将一直等到阻塞解除才能运行。不要依赖此功能进行金融交易或核威慑。 - Dave