0

我需要对某些操作进行互斥。在我的服务器上,我安装了 APC。

是否有任何批准的类来获取和释放互斥锁?如果已经有“官方”解决方案,我会避免重新发明轮子。

请注意,我知道我可以使用flock,但我不想回退到文件系统来获取互斥锁

就像是:

$m = new Mutex;
$m->lock();
  //> Do stuff
$m->unlock();
4

3 回答 3

1

更高版本的 PHP 具有内置的 Mutex 类。如果您在 *nix 系统上,还请在文档中查找“信号量函数”。

于 2012-12-11T21:58:35.450 回答
1

您可能想在 php 中尝试我的 Mutex 实现。它支持多种适配器——flock、memcache、mysql。目前没有 apc 实现,因为无法在多个 Web 服务器上使用它 - 但您可能总是很容易添加它并发送拉取请求。

https://github.com/arvenil/ninja-mutex

于 2013-04-03T16:53:20.147 回答
0

用 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

于 2017-09-25T15:24:32.220 回答