deminy / ninja-mutex
Simple to use mutex implementation that can use flock, memcache, memcached, mysql or redis for locking
Requires
- php: >=5.3.0
Requires (Dev)
- ext-memcache: *
- ext-memcached: *
- ext-pdo_mysql: *
- ext-redis: *
- codeclimate/php-test-reporter: ^0.1 || ^0.3
- mikey179/vfsstream: ^1.4 || ^1.5 || ^1.6
- phpunit/phpunit: ^4.8 || ^5.5 || ^5.6
- predis/predis: ^1.0 || ^1.1
- scrutinizer/ocular: ^1.1 || ^1.3
Suggests
- ext-memcache: Create mutex using memcache extension
- ext-memcached: Create mutex using memcached extension
- ext-pdo_mysql: Create mutex using MySql
- predis/predis: Create mutex using Predis (client library for Redis)
Replaces
This package is auto-updated.
Last update: 2021-09-13 16:48:55 UTC
README
About
ninja-mutex is a simple to use mutex implementation for php. It supports different adapters (flock, memcache, mysql, redis, ...) so you can setup it as you wish. All adapters (if set up properly) can be used in multi server environment - in other words lock is shared between web servers.
Usage
Mutex
First you need to choose adapter and setup it properly. For example if you choose flock implementation first you need to setup NFS filesystem and mount it on web servers. In this example we will choose memcache adapter:
<?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!'); }
Mutex Fabric
If you want to use multiple mutexes in your project then MutexFabric is the right solution. You setup lock implementor once and you can use as many mutexes as you want!
<?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!'); }
Installation
Composer
Download composer:
wget -nc http://getcomposer.org/composer.phar
and add dependency to your project:
php composer.phar require arvenil/ninja-mutex:*
Running tests
Tests require vfsStream to work. To install it, simply run in project dir:
wget -nc http://getcomposer.org/composer.phar && php composer.phar install --dev
To run tests type in console:
vendor/bin/phpunit
Something doesn't work
Feel free to fork project, fix bugs and finally request for pull