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
126 Stars 23 Forks MIT License 61 Commits 6 Opened issues

Description

Battle-hardened distributed locking using redis

Services available

!
?

Need anything else?

Contributors list

# 157,594
serverl...
lambda
aws-sam
Erlang
13 commits
# 285,079
CSS
HTML
React
html5-v...
2 commits
# 730,081
JavaScr...
Lua
1 commit
# 251,068
google-...
google-...
Google
C++
1 commit
# 3,156
sass-fr...
splash
Socket....
pipelin...
1 commit
# 141,210
crdt
HTML
TypeScr...
Google ...
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 } });

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.