This repository has been archived by the owner. It is now read-only.
A distributed lock for Ruby (using Redis)
Switch branches/tags
Nothing to show
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Failed to load latest commit information.


This repo has been abandonned. Please see this repo instead:

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:

I believe it is an optimistic locking algorithm.

Nevertheless, the algorithm on releasing a lock is improved. Please the comments in

The example of using it:

$redis =

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

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).


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


Tanin Na Nakorn

Boring legal stuff

You can do whatever you want with it