thiamsantos / red_mutex

Redlock (Redis Distributed Lock) implementation

Home Page:https://hex.pm/packages/red_mutex

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

RedMutex

RedMutex defines an easy to use interface to control an distributed lock backed by redis.

Hex.pm Version CI Coverage Status

Usage

When used, the mutex expects the :otp_app as option. The :otp_app should point to an OTP application that has the mutex configuration. For example, the mutex:

defmodule MyApp.MyMutex do
  use RedMutex, otp_app: :my_app
end

Could be configured with:

config :my_app, MyApp.MyMutex,
  url: "redis://localhost:6379",
  key: "red_mutex_lock",
  expiration_in_seconds: 3_600

Options:

  • :url - the redis url. Required.
  • :key- The key at redis used to store the lock information. Defaults to "red_mutex_lock".
  • :expiration_in_seconds - Time in seconds that the resource will be kept locked. After that time the lock will be automattically released. Defaults to 3600, one hour.

Example

# In your config/config.exs file
config :my_app, MyApp.MyMutex,
  url: "redis://localhost:6379",
  key: "red_mutex_lock",
  expiration_in_seconds: 3_600

# In your application code
defmodule MyApp.MyMutex do
  use RedMutex, otp_app: :my_app
end

defmodule MyApp do
  import RedMutex, only: [synchronize: 1]
  alias MyApp.MyMutex

  def syncronized_work do
    synchronize({__MODULE__, :work, []})
  end

  def lock_unlock do
    case MyMutex.acquire_lock() do
      {:ok, lock} ->
        work()
        MyMutex.release_lock(lock)

      {:error, reason} -> {:error, reason}
    end
  end

  def work do
    # do some work
    {:ok, "completed"}
  end
end

Installation

The package can be installed by adding red_mutex to your list of dependencies in mix.exs:

def deps do
  [
    {:red_mutex, "~> 0.3.0"}
  ]
end

The docs can be found at https://hexdocs.pm/red_mutex.

Contributing

See the contributing file.

License

Apache License, Version 2.0 © Thiago Santos

About

Redlock (Redis Distributed Lock) implementation

https://hex.pm/packages/red_mutex

License:Apache License 2.0


Languages

Language:Elixir 100.0%