Skip to content

mgregory-carecloud/ruby_redis_lock

 
 

Repository files navigation

Ruby-Redis-Lock - Distributed lock for Ruby (using Redis)

A distributed lock that utilizes Redis. It also handles failures. If a process acquires a lock for more than some period of time (default is 60 seconds), the lock is automatically released.

Basically, it follows the algorithm explained here: http://redis.io/commands/setnx

I believe it is an optimistic locking algorithm.

Nevertheless, the algorithm on releasing a lock is improved. Please the comments in http://redis.io/commands/setnx

The example of using it:

$redis = Redis.new

$redis.lock('some_name', 60, 10) do
 
 #
 # Do some tasks here
 #
 
end

The API is below:

lock(lock_name, processing_timeout=60, acquiring_timout=10)

You can change processing_timeout and acquiring_timeout.

The lock will be expired after it has been acquired for a period of time longer than processing_timeout (in seconds).

An error will be raised if the lock cannot be acquired within acquiring_timeout (in seconds).

Installation

You can install it directly by:

gem install ruby_redis_lock

or put it in your Gemfile:

gem 'ruby_redis_lock'

Help me

  1. Fork the project
  2. Install all dependencies with
bundle install
  1. Start Redis and running all test cases
bundle exec rspec spec/*
  1. Add a feature, if everything is ok
  2. Write tests for the feature
  3. Send me a pull request

Author

Tanin Na Nakorn

Boring legal stuff

You can do whatever you want with it

About

A distributed lock for Ruby (using Redis)

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • Ruby 99.5%
  • Batchfile 0.5%