Redlock in Ruby

This came in useful today. Setting up a distributed lock with multiple consensus nodes.

require 'ddtrace'
require 'redlock'
require 'redis'

urls = ['redis://localhost:6379/1', 'redis://localhost:6379/2']
redii = urls.map do |url|
    Redis.new(url: url).tap do |redis|
        Datadog.configure(redis, service_name: "local/redis-redlock")
    end
end

rl = Redlock::Client.new redii

rl.lock "fourseconds", 4000

rl.lock("fourseconds", 4000) do |lockstate|
    puts lockstate
end

This includes
– multiple local instances of redis to test against
– datadog APM tracing
– acquiring a one-time lock
– acquiring a lock, and releasing it after executing a block

You can run an instance of redis with

docker run -d --name redis -p 6379:6379 circleci/redis:5.0.5