This adds supports for memcache or redis as lock storage.
gem install remote_lock
Lock using memcached:
# memcache = MemCache.new(YAML.load(File.read("/path/to/memcache/config"))) # Or whatever way you have your memcache connection $lock = RemoteLock.new(RemoteLock::Adapters::Memcached.new(memcache))
Lock using redis:
# redis = Redis.new # Or whatever way you have your redis connection $lock = RemoteLock.new(RemoteLock::Adapters::Redis.new(redis))
Then, wherever you'd like to lock a key, use it like this:
$lock.synchronize("some-key") do # stuff that needs synchronization in here end
By default keys will expire after 60 seconds, you can define this per key:
$lock.synchronize("my-key", expiry: 30.seconds) do ... end
By default it will try 11 times to lock the resource, this can be set per key:
$lock.synchronize("my-key", retries: 5) do ... end
You can customize the interval between tries, initially it's 10ms:
$lock.synchronize("my-key", initial_wait: 10e-3) do ... end
For more info, see lib/remote_lock.rb. It's very straightforward to read.
Note on Patches/Pull Requests
- Fork the project.
- Make your feature addition or bug fix.
- Add tests for it. This is important so I don't break it in a future version unintentionally.
- Commit, do not mess with rakefile, version, or history. (if you want to have your own version, that is fine but bump version in a commit by itself I can ignore when I pull)
- Send me a pull request. Bonus points for topic branches.
MIT licence. Copyright (c) 2013 HouseTrip Ltd.
Based on the memcache-lock gem: https://github.com/jamesgolick/memcache-lock