reactphp redlock
v2.1.0
PHPの非同期レッドロックアルゴリズムの実装
インストールしたら、カストディアンをインスタンス化することにより、プロジェクトにレッドロックを組み込むことができます。このエンティティはロックオーケストレーションの責任があり、Redisクライアントオブジェクトインスタンスへのアクセスが必要です。
/* Instantiate prerequisites */
$ factory = new Clue React Redis Factory ();
$ client = $ factory -> createLazyClient ( ' 127.0.0.1 ' );
/* Instantiate our lock custodian */
$ custodian = new RTCKit React Redlock Custodian ( $ client );バイナリの結果が望ましいユースケースの場合、 acquire()メソッドが最適に機能します。
/**
* @param string $resource Redis key name
* @param float $ttl Lock's time to live (in seconds)
* @param ?string $token Unique identifier for lock in question
* @return PromiseInterface
*/
$ custodian -> acquire ( ' MyResource ' , 60 , ' r4nd0m_token ' )
-> then ( function (? Lock $ lock ) {
if ( is_null ( $ lock )) {
// Ooops, lock could not be acquired for MyResource
} else {
// Awesome, MyResource is locked for a minute
// ...
// Be nice and release the lock when done
$ custodian -> release ( $ lock );
}
});spin()メソッドは、プロセスがロックの取得を試み続ける必要がある状況向けに設計されています。
/**
* @param int $attempts Maximum spin/tries
* @param float $interval Spin/try interval (in seconds)
* @param string $resource Redis key name
* @param float $ttl Lock's time to live (in seconds)
* @param ?string $token Unique identifier for lock in question
* @return PromiseInterface
*/
$ custodian -> spin ( 100 , 0.5 , ' HotResource ' , 10 , ' r4nd0m_token ' )
-> then ( function (? Lock $ lock ): void {
if ( is_null ( $ lock )) {
// Wow, after 100 tries (with a gap of 0.5 seconds) I've
// given up acquiring a lock on HotResource
} else {
// Awesome, HotResource is locked for 10 seconds
// ...
// Again, be nice and release the lock when done
$ custodian -> release ( $ lock );
}
})最後に、提供された例は良い出発点です。
RedLockはPHP 7.2+と互換性があり、手がかり/ReactPhp-Redisライブラリが必要です。
Composerを使用して、プロジェクトの依存関係としてライブラリを追加できます。
composer require rtckit/react-redlock開発中にライブラリのみが必要な場合は、たとえばテストスイートで使用する場合、開発のみの依存関係として追加する必要があります。
composer require --dev rtckit/react-redlockテストスイートを実行するには、このリポジトリをクローンしてから、コンポーザーを介して依存関係をインストールします。
composer install次に、プロジェクトルートに移動して実行します。
php -d memory_limit=-1 ./vendor/bin/phpunit -c ./etc/phpunit.xml.distコードの品質を高めるために、RedLockはPHPSTANとPSALMを使用します。
php -d memory_limit=-1 ./vendor/bin/phpstan analyse -c ./etc/phpstan.neon -n -vvv --ansi --level=max src
php -d memory_limit=-1 ./vendor/bin/psalm --config=./etc/psalm.xml --show-info=trueMIT、ライセンスファイルを参照してください。
バグレポート(および小さなパッチ)は、問題トラッカーを介して送信できます。リポジトリのフォーキングとプルリクエストの送信は、実質的なパッチに対して推奨されます。