我需要互斥一些手术。在我的服务器上安装了APC。
是否有任何获得批准的类别来获取和发布互斥锁?如果已有“官方”解决方案,我会避免重新发明轮子。
请注意,我知道我可以使用flock
,但我不想回到文件系统来获取互斥锁
类似的东西:
$m = new Mutex;
$m->lock();
//> Do stuff
$m->unlock();
答案 0 :(得分:1)
PHP的更高版本内置了Mutex类。如果您使用的是* nix系统,还可以在文档中查找“信号量函数”。
答案 1 :(得分:1)
您可能想尝试我的Mutex implementation in php。它支持几个适配器 - flock,memcache,mysql。目前没有apc实现,因为无法在多个Web服务器上使用它 - 但您可能总是轻松添加它并发送拉取请求。
答案 2 :(得分:0)
使用APC实现互斥库通常是一种诽谤。 Mutex / Locks最有用的应用是分布式环境和多实例......但APC是机器本地的。
要在分布式数据库中实现可靠的多实例互斥信令,您需要使用FileSystem(S3)或共享REDIS或MEMCACHED服务(数据库可以工作但速度较慢)。
不建议在分布式环境中使用Ninja Mutex。
Istead使用此库:https://github.com/cheprasov/php-redis-lock 它经过我的测试,适用于多个PHP-FPM实例,Redis和MongoDB集群。
如果您想了解更多信息,请阅读官方redis文档: https://redis.io/topics/distlock