我会尽力用正确的英语解释我的问题。
我在ajax中有一个全局倒计时,它显示了一个setinterval的剩余时间(与服务器时间计算)。其目的是在剩余时间到达某个目标时只调用函数一次。
$timeLeft = strtotime($wallet->date_upd)- time();
if ($timeLeft <= 3)
{
function() 'this function update or not $wallet->date_upd to add time'
}
由于ajax倒计时是全局的,并且由于传输和渲染延迟,该函数可以由多个用户调用。什么好主意吗?
我假设,当timleft结束,你的脚本运行,你也更新date_upd
到一个新的时间?
在这种情况下,您可以执行更新并检查是否有受影响的行。
如果另一个脚本比查询中的WHERE更快,则将不再工作,并且affected_rows将为0。
$new_date_upd = date('Y-m-d H:i:s', strtotime('+2 hours'));
mysql_query("UPDATE wallet SET date_upd = '{$new_date_upd}' WHERE date_upd = '{$wallet->date_upd}'");
if (mysql_affected_rows() > 0) {
// this script is the only one doing this stuff
}
所以这应该是在MySQL工作的东西。
如果你正在管理自己的服务器,并且可以安装一些东西,那么我建议你检查Redis。IO,这是一个伟大的工具做内存的东西(像一个先进的memcache),它也可以帮助你做'锁定'在一个很好的方式