避免备用PHP缓存(APC)并发性问题


Avoid Alternative PHP Cache (APC) concurrency issues

我在APC每秒存储大量变量。同时,我有一个CRON任务,它不断执行一个php进程,从APC读取变量,从APC删除它并将其存储在数据库中。php脚本获取由前缀标识的所有变量。问题是,虽然PHP进程访问APC,读取所有变量,从APC中删除它们并将其插入数据库,但另一个进程(也由CRON启动)可以读取相同的数据,因为它尚未被删除,我将在数据库中复制数据。有什么解决办法吗?也许是APC的限制?

提前感谢。

马克

首先,出于好奇,我想知道这个解决方案背后的原因!非常感兴趣!

但这是定时作业的常见问题。更严重的问题是,如果一个cron作业需要很长时间才能完成,而另一个作业又开始了,这可能会使服务器上的负载增加一倍,需要两倍的时间才能完成,那么您可能会陷入一个循环,最终导致服务器停机。这是一个有趣的问题!

我以前通过设置一个开关来解决这个问题,该开关通知代码上一个作业正在运行。当您的作业完成时,移除开关,下一次您的cron将再次运行。你可以把这个开关放在APC里