我正在尝试删除 MySQL 数据库中的过期条目,在创建或更新名为 lastBeat 的字段时使用 CURRENT_TIME 进行更新,我使用以下查询检查/删除超过 20 秒的行:
DELETE * FROM `rmachines` WHERE
`lastBeat` < (NOW() - 20);
我也尝试过 CURRENT_TIME 而不是 NOW()
有2个主要循环:
每秒更新 rmachines 中的一行
执行删除查询
如果 2 被快速执行,随着时间滚动到下一分钟(即 59-60 秒),它会删除该行,就好像它已经过期(即使认为它肯定没有过期!),否则它表现得很好。
如果 2 每秒执行一次,这不太明显,“假到期”很少发生,但我每秒运行 5 次以暴露“问题”。
我找到了一个解决方案,经过测试,似乎可以在相同的场景下工作:
但是谁能告诉我为什么我的方法不起作用?