Code Monkey home page Code Monkey logo

ioredfour's Introduction

ioredfour

Originally forked from ioredfour. Main differences being that @triggi/ioredfour provides better consitency in a failover environment, has a Promise-based interface and allows to extend locks.

Originally forked from redfour. Main difference being that redfour uses node_redis + node-redis-scripty while ioredfour uses ioredis.

Install

or

npm install @triggi/ioredfour --save

Usage example

const Lock = require('ioredfour');

(async ()=> {
  const testLock = new Lock({
    // Can also be an `Object` of options to pass to `new Redis()`
    // https://www.npmjs.com/package/ioredis#connect-to-redis, or an existing
    // instance of `ioredis` (if you want to reuse one connection, though this
    // module must create a second).
    redis: 'redis://localhost:6379',
    namespace: 'mylock',
    // Don't consider the lock owned until writes have been replicated at least this many times
    minReplications: 1,
    // Wait at most this many miliseconds for replication
    replicationTimeout: 500,
  });
  const id = Math.random();

  // First, acquire the lock.
  const firstlock = await testLock.acquireLock(id, 60 * 1000 /* Lock expires after 60sec if not released */).catch(e => {
    console.log('error acquiring first lock', e);
  });
  if (!firstlock.success) {
    console.log('lock exists', firstlock);
  } else {
    console.log('lock acquired initially');
  }

  // Another server might be waiting for the lock like this.
  testLock.waitAcquireLock(id, 60 * 1000 /* Lock expires after 60sec */ , 10 * 1000 /* Wait for lock for up to 10sec */).then(secondlock => {
    if (secondlock.success) {
      console.log('second lock acquired after wait!', secondlock);
    } else {
      console.log('second lock not acquired after wait!', secondlock);
    }
  }).catch(e => {
    console.log('error wait acquiring', e);
  });

  // When the original lock is released, `waitAcquireLock` is fired on the other server.
  setTimeout(async () => {
    try {
      await testLock.releaseLock(firstlock);
      console.log('released lock');
    } catch(e) {
      console.log('error releasing', e);
    }
  }, 10 * 1000);
})();

Contributing

We welcome pull requests! Please lint your code.

Release History

  • 1.1.0 add Lock.extend, promisified interface, check for replication
  • 1.0.2-ioredis Forked from redfour and switch node_redis with ioredis
  • 1.0.2 Don't use instanceof to determine if the redis constructor option is of type redis.RedisClient.
  • 1.0.1 Fix issue where you could only pass in a Redis connection URI.
  • 1.0.0 Initial release.

Etymology

Shortened (and easier to pronouce) version of "Redis Semaphore"

ioredfour's People

Contributors

bradvogel avatar ttacon avatar dreusel avatar andris9 avatar wearhere avatar vinnyoodles avatar spencer-brown avatar

Watchers

James Cloos avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.