reactphp redlock
v2.1.0
PHP에 대한 비동기 레드 록 알고리즘 구현
일단 설치되면 관리인 을 인스턴스화하여 프로젝트에 Redlock을 통합 할 수 있습니다. 이 엔티티는 잠금 오케스트레이션을 담당하며 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 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, 라이센스 파일을 참조하십시오.
버그 보고서 (및 작은 패치)는 문제 추적기를 통해 제출할 수 있습니다. 리포지토리를 포킹하고 풀 요청을 제출하는 것이 실질적인 패치에 선호됩니다.