by TheDeveloper

TheDeveloper / warlock

Battle-hardened distributed locking using redis

127 Stars 23 Forks Last release: Not found MIT License 56 Commits 8 Releases

Available items

No Items, yet!

The developer of this repository has not created any items for sale yet. Need a bug fixed? Help with integration? A different license? Create a request here:


Travis Dependency Status Join the chat at https://gitter.im/TheDeveloper/warlock

Battle-hardened distributed locking using redis.


  • node-redis compatible with
  • Redis
    or above. If you're running a Redis version from
    inclusive use
    of this module.


npm install node-redis-warlock


var Warlock = require('node-redis-warlock');
var redis = require('redis');

// Establish a redis client and pass it to warlock var redis = redis.createClient(); var warlock = Warlock(redis);

// Set a lock var key = 'test-lock'; var ttl = 10000; // Lifetime of the lock

warlock.lock(key, ttl, function(err, unlock){ if (err) { // Something went wrong and we weren't able to set a lock return; }

if (typeof unlock === 'function') { // If the lock is set successfully by this process, an unlock function is passed to our callback. // Do the work that required lock protection, and then unlock() when finished... // // do stuff... // unlock(); } else { // Otherwise, the lock was not established by us so we must decide what to do // Perhaps wait a bit & retry... } });

// set a lock optimistically var key = 'opt-lock'; var ttl = 10000; var maxAttempts = 4; // Max number of times to try setting the lock before erroring var wait = 1000; // Time to wait before another attempt if lock already in place warlock.optimistic(key, ttl, maxAttempts, wait, function(err, unlock) {});

// unlock using the lock id var key = 'test-lock-2'; var ttl = 10000; var lockId;

warlock.lock(key, ttl, function(err, _, id) { lockId = id; });

// each client who knows the lockId can release the lock warlock.unlock(key, lockId, function(err, result) { if(result == 1) { // unlocked successfully } });


We use cookies. If you continue to browse the site, you agree to the use of cookies. For more information on our use of cookies please see our Privacy Policy.