antriver / ninja-mutex
简单易用的互斥锁实现,可以使用flock、memcache、memcached、mysql或redis进行锁定
0.6.1
2020-07-16 01:13 UTC
Requires
- php: >=5.3.0
Requires (Dev)
- ext-memcache: *
- ext-memcached: *
- ext-pdo_mysql: *
- ext-redis: *
- codeclimate/php-test-reporter: ^0.1 || ^0.3 || ^0.4
- mikey179/vfsstream: ^1.4 || ^1.5 || ^1.6
- phpunit/phpunit: ^4.8 || ^5.5 || ^5.6 || ^5.7
- predis/predis: ^1.0 || ^1.1
- scrutinizer/ocular: ^1.1 || ^1.3 || ^1.4
Suggests
- ext-memcache: Create mutex using memcache extension
- ext-memcached: Create mutex using memcached extension
- ext-pdo_mysql: Create mutex using MySQL PDO
- predis/predis: Create mutex using Predis (client library for Redis)
Replaces
This package is auto-updated.
Last update: 2024-09-10 03:21:30 UTC
README
关于
ninja-mutex 是一个简单易用的 PHP 互斥锁实现。它支持不同的适配器(flock、memcache、mysql、redis 等),因此您可以按照自己的意愿进行设置。所有适配器(如果设置正确)都可以在多服务器环境中使用 - 换句话说,锁是共享在 Web 服务器之间的。
用法
互斥锁
首先您需要选择一个适配器并正确设置它。例如,如果您选择 flock 实现首先需要设置 NFS 文件系统并在 Web 服务器上挂载它。在这个例子中,我们将选择 memcache 适配器
<?php require 'vendor/autoload.php'; use NinjaMutex\Lock\MemcacheLock; use NinjaMutex\Mutex; $memcache = new Memcache(); $memcache->connect('127.0.0.1', 11211); $lock = new MemcacheLock($memcache); $mutex = new Mutex('very-critical-stuff', $lock); if ($mutex->acquireLock(1000)) { // Do some very critical stuff // and release lock after you finish $mutex->releaseLock(); } else { throw new Exception('Unable to gain lock!'); }
互斥锁工厂
如果您想在项目中使用多个互斥锁,那么 MutexFabric 是正确的解决方案。只需设置一次锁实现,您就可以使用任意数量的互斥锁!
<?php require 'vendor/autoload.php'; use NinjaMutex\Lock\MemcacheLock; use NinjaMutex\MutexFabric; $memcache = new Memcache(); $memcache->connect('127.0.0.1', 11211); $lock = new MemcacheLock($memcache); $mutexFabric = new MutexFabric('memcache', $lock); if ($mutexFabric->get('very-critical-stuff')->acquireLock(1000)) { // Do some very critical stuff // and release lock after you finish $mutexFabric->get('very-critical-stuff')->releaseLock(); } else { throw new Exception('Unable to gain lock for very critical stuff!'); } if ($mutexFabric->get('also-very-critical-stuff')->acquireLock(0)) { // Do some also very critical stuff // and release lock after you finish $mutexFabric->get('also-very-critical-stuff')->releaseLock(); } else { throw new Exception('Unable to gain lock for also very critical stuff!'); }
安装
Composer
下载 composer
wget -nc https://getcomposer.org.cn/composer.phar
将依赖项添加到您的项目中
php composer.phar require arvenil/ninja-mutex:*
运行测试
测试需要 vfsStream 来工作。要安装它,只需在项目目录中运行
wget -nc https://getcomposer.org.cn/composer.phar && php composer.phar install --dev
要在控制台中运行测试,请输入
vendor/bin/phpunit
某些事情不起作用
您可以随意克隆项目,修复错误,并最终请求合并