Download the PHP package dealerinspire/laravel-redlock without Composer
On this page you can find all versions of the php package dealerinspire/laravel-redlock. It is possible to download/install these versions without Composer. Possible dependencies are resolved automatically.
Download dealerinspire/laravel-redlock
More information about dealerinspire/laravel-redlock
Files in dealerinspire/laravel-redlock
Package laravel-redlock
Short Description Redis distributed locks for laravel
License MIT
Informations about the package laravel-redlock
Laravel RedLock
A Laravel-friendly implementation of the Redis Redlock algorithm for distributed lock management.
Acknowledgements
This library was originally built by LibiChai based on the RedLock algorithm developed by antirez. The library was reworked by the team at That's Us, Inc. This project has been forked and maintained by Dealer Inspire Inc.
Installation
composer require dealerinspire/laravel-redlock
- The
RedLockServiceProvider
should be Auto-discovered by Laravel. If not, addDealerInspire\RedLock\RedLockServiceProvider::class,
to theproviders
array inconfig/app.php
- Enjoy!
Compatibility
Laravel Version | RedLock Version |
---|---|
5.x | ^4.0 |
6.x | ^6.0 |
7.x | ^7.0 |
8.x | ^8.0 |
9.x | ^9.0 |
10.x | ^10.0 |
11.x | ^10.0 |
It's Simple!
Set a lock on any scalar. If the lock()
method returns false, you did not acquire the lock.
Store results of the lock()
method. Use this value to release the lock with unlock()
.
Example
This example sets a lock on the key "1" with a 3 second expiration time.
If it acquired the lock, it does some work and releases the lock.
Refresh
Use refreshLock()
to reacquire and extend the time of your lock.
Even Easier with Closures
Use runLocked()
for nicer syntax. The method returns the results of the closure, or else false if the lock could not be acquired.
Refresh with Closures
You can easily refresh your tokens when using closures. The first parameter to your closure is $refresh
. Simply call it when you want to refresh. If the lock cannot be refreshed, $refresh()
will break out of the closure.
Lock Queue Jobs Easily
If you're running jobs on a Laravel queue, you may want to avoid queuing up the same job more than once at a time.
The DealerInspire\RedLock\Traits\QueueWithoutOverlap
trait provides this functionality with very few changes to your job. Usually only two changes are necessary.
use DealerInspire\RedLock\Traits\QueueWithoutOverlap
as a trait- Change the
handle()
method tohandleSync()
Sometimes it's also necessary to specify a getLockKey()
method. This method must return the string that needs to be locked.
This is typically unnecessary because the lock key can be generated automatically. But if the job's data is not easy to stringify, you must define the getLockKey()
method.
This trait also provides a refresh method called refreshLock()
. If refreshLock()
is unable to refresh the lock, an exception is thrown and the job fails.
Finally, you can change the lock time-to-live from the default 300 seconds to another
value using the $lock_time
property.
Contribution
If you find a bug or want to contribute to the code or documentation, you can help by submitting an issue or a pull request.
Development
Development is done through simple use of the official PHP and Composer images.
Getting Started
- Pull down the repo.
- Install dependencies with
bin/composer install
- That's it!
Run tests
Tests can be ran with bin/php vendor/bin/phpunit
.
License
All versions of laravel-redlock with dependencies
illuminate/support Version >=10.0
illuminate/console Version >=10.0
predis/predis Version ^2.0