arvenil/ninja-mutex

简单的互斥锁实现,可以使用flock、memcache、memcached、mysql或redis进行锁定

维护者

详细信息

github.com/arvenil/mutex

主页

源码

问题

资助包维护!
arvenil

安装量: 2,696,389

依赖者: 31

建议者: 1

安全: 0

星标: 189

关注者: 11

分支: 31

公开问题: 6

0.6.0 2016-05-31 13:47 UTC

This package is auto-updated.

Last update: 2024-09-15 20:20:35 UTC


README

License PHP Version

Build

Coverage Quality Maintainability Grade Total Downloads

关于

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

某些东西不工作

请随意分叉项目,修复错误,并最终请求拉取请求。