我需要对某些操作进行互斥。在我的服务器上,我安装了 APC。
是否有任何批准的类来获取和释放互斥锁?如果已经有“官方”解决方案,我会避免重新发明轮子。
请注意,我知道我可以使用flock
,但我不想回退到文件系统来获取互斥锁
就像是:
$m = new Mutex;
$m->lock();
//> Do stuff
$m->unlock();
我需要对某些操作进行互斥。在我的服务器上,我安装了 APC。
是否有任何批准的类来获取和释放互斥锁?如果已经有“官方”解决方案,我会避免重新发明轮子。
请注意,我知道我可以使用flock
,但我不想回退到文件系统来获取互斥锁
就像是:
$m = new Mutex;
$m->lock();
//> Do stuff
$m->unlock();
更高版本的 PHP 具有内置的 Mutex 类。如果您在 *nix 系统上,还请在文档中查找“信号量函数”。
您可能想在 php 中尝试我的 Mutex 实现。它支持多种适配器——flock、memcache、mysql。目前没有 apc 实现,因为无法在多个 Web 服务器上使用它 - 但您可能总是很容易添加它并发送拉取请求。
用 APC 实现互斥库通常是无稽之谈。互斥锁/锁最有用的应用是分布式环境和多实例……但 APC 是机器本地的。
要在分布式 DB 中实现可靠的多实例 Mutex 信令,您需要使用 FileSystem (S3) 或共享的 REDIS 或 MEMCACHED 服务(DB 可以执行工作但速度较慢)。
Ninja Mutex 不推荐用于分布式环境。
我而是使用这个库: https ://github.com/cheprasov/php-redis-lock 它已经过我的测试,并且适用于多个 PHP-FPM 实例、Redis 和 MongoDB 集群。
如果您想了解更多信息,请阅读有关此的官方 redis 文档: https ://redis.io/topics/distlock