https://github.com/clever/node-redis-reservation
Distributed locking mechanism built on redis.
https://github.com/clever/node-redis-reservation
Last synced: about 1 year ago
JSON representation
Distributed locking mechanism built on redis.
- Host: GitHub
- URL: https://github.com/clever/node-redis-reservation
- Owner: Clever
- License: apache-2.0
- Created: 2013-09-24T22:07:14.000Z (almost 13 years ago)
- Default Branch: master
- Last Pushed: 2024-09-23T15:44:39.000Z (almost 2 years ago)
- Last Synced: 2025-03-17T16:53:17.923Z (over 1 year ago)
- Language: CoffeeScript
- Homepage:
- Size: 49.8 KB
- Stars: 5
- Watchers: 64
- Forks: 1
- Open Issues: 3
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
node-redis-reservation
======================
redis reservations are like locks/mutexes except they can expire.
### constructor(by, host, port, heartbeat_interval, lock_ttl, log, password)
Creates a new redis-reservation which includes setting up redis connection credentials.
##### Arguments
- `by` - The worker name
- `host` - Redis host to connect to
- `port` - Redis port to connect to
- `heartbeat_interval` - Renew the lock at every `heartbeat_interval` milliseconds
- `lock_ttl` - Renew the lock for `lock_ttl` seconds
- `log` - Log to use or else defaults to console.log
- `password` - Password to authenticate with redis server
##### Example
```
ReserveResource = require 'redis-reservation'
reservation = new ReserveResource
'worker-name',
process.env.REDIS_HOST,
process.env.REDIS_PORT,
10 * 60 * 1000, # 10 minutes
30 * 60 # 30 minutes
# log, # defaults to console.log
# password # defaults to no password (empty string)
```
----
### lock(resource, callback)
Attempts to lock the resource if it can.
##### Arguments
- `resource` - The key to use to uniquely identify this lock
- `callback(err, lock_status)` - `lock_status` is `true` if lock was acquired, `false` otherwise.
##### Example
```
reservation.lock job_name, (err, lock_status) ->
return err if err?
if lock_status
do_job()
else
console.log 'Reservation already held'
```
----
### wait_until_lock(resource, callback)
Waits until the lock can be acquired for the resource.
##### Arguments
- `resource` - The key to use to uniquely identify this lock
- `callback(err, reserve_key)` - `callback` is called only when the lock can be acquired. `reserve_key` is the name of the key in redis that was used to acquire the lock.
##### Example
```
reservation.wait_until_lock job_name, (err, reserve_key) ->
return err if err?
do_job()
```
----
### release(callback)
Releases the lock.
##### Arguments
- `callback(err)` - Callback to be called once the lock is released, or error.
##### Example
```
reservation.release (err) ->
if err?
console.log 'Could not release lock, maybe the reservation was already lost?'
return err
```