Need help with warlock?
Click the “chat” button below for chat support from the developer who created it, or find similar developers for support.

About the developer

TheDeveloper
134 Stars 23 Forks MIT License 75 Commits 4 Opened issues

Description

Battle-hardened distributed locking using redis

Services available

!
?

Need anything else?

Contributors list

# 139,974
serverl...
lambda
aws-sam
aws-sdk
53 commits
# 265,796
TypeScr...
HTML
Shell
Node.js
3 commits
# 255,539
CSS
HTML
React
reactjs
2 commits
# 720,297
JavaScr...
Lua
1 commit
# 210,182
google-...
google-...
Google
Objecti...
1 commit
# 3,278
imagema...
sass-fr...
splash
pipelin...
1 commit
# 139,152
crdt
HTML
Google ...
Lua
1 commit
# 293,816
Redis
Lua
Shell
HTML
1 commit
# 665,617
JavaScr...
Lua
1 commit

warlock

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

Battle-hardened distributed locking using redis.

Requirements

  • node-redis compatible with
    v0.10
  • Redis
    v2.6.12
    or above. If you're running a Redis version from
    v2.6.0
    to
    v2.6.11
    inclusive use
    v0.0.7
    of this module.

Install

npm install node-redis-warlock

Usage

const Warlock = require('node-redis-warlock');
const Redis = require('redis');

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

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

warlock.lock(key, ttl, (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 const key = 'opt-lock'; const ttl = 10000; const maxAttempts = 4; // Max number of times to try setting the lock before erroring const wait = 1000; // Time to wait before another attempt if lock already in place warlock.optimistic(key, ttl, maxAttempts, wait, (err, unlock) => {});

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

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

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

// change a lock's ttl var key = 'touch-lock'; var ttl = 10000; var ttl2 = 20000;

warlock.lock(key, ttl, function(err, unlock, id) { warlock.touch(key, id, ttl2, function(err) {}); });

ProTips

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.