Current section
Files
Jump to
Current section
Files
lib/redis_mutex.ex
defmodule RedisMutex do
@moduledoc """
An Elixir library for using Redis locks
## Setup
1. Add `redis_mutex` to your list of dependencies in `mix.exs`:
```elixir
def deps do
[{:redis_mutex, "~> 0.4.0"}]
end
```
2. Ensure `redis_mutex` is started before your application:
```elixir
def application do
[applications: [:redis_mutex]]
end
```
3. Set the `redis_url` in your `config.exs`
```elixir
config :redis_mutex, redis_url: {:system, "REDIS_URL"}
```
4. Call `use RedisMutex` in the module you want to use the lock.
```elixir
defmodule PossumLodge do
def get_oath do
"Quando omni flunkus moritati"
end
end
```
With a Redis lock:
```elixir
defmodule PossumLodge do
use RedisMutex
def get_oath do
with_lock("my_key") do
"Quando omni flunkus moritati"
end
end
end
```
"""
defmacro __using__(opts) do
lock_module =
if Keyword.keyword?(opts),
do:
Keyword.get(
opts,
:lock_module,
Application.get_env(:redis_mutex, :lock_module, RedisMutex.Lock)
)
quote do
import unquote(lock_module), warn: false
end
end
end