PHP mutex handling in different ways
Via Composer
$ composer require phlib/mutex
$adapter = new \Phlib\Db\Adapter([
'host' => '127.0.0.1',
'username' => 'my-user',
'password' => 'my-pass'
]);
$mutex = new \Phlib\Mutex\MySQL('my-lock', $adapter);
if ($mutex->lock()) {
// Do some data manipulation while locked
$mutex->unlock();
}
Get-Or-Create provides a simple way to attempt retrieval of a value, or create it using a mutex if it doesn't already exist
$getClosure = function() {
// attempt to get a value, eg. from DB, cache, etc.
if (!$value) {
throw new \Phlib\Mutex\NotFoundException();
}
return $value;
};
$createClosure = function() {
// attempt to create a value and write eg. to DB, cache, etc.
return $value;
};
$value = \Phlib\Mutex\Helper::getOrCreate($mutex, $getClosure, $createClosure);
This package is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.
This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public License along with this program. If not, see http://www.gnu.org/licenses/.