2020-12-12 02:04:39 +01:00
|
|
|
defmodule Cache do
|
|
|
|
@moduledoc """
|
|
|
|
Cache is an in-memory key-value store.
|
|
|
|
"""
|
|
|
|
use Agent
|
|
|
|
|
|
|
|
@doc """
|
|
|
|
Inititalize the key-value store.
|
|
|
|
"""
|
|
|
|
def start_link(_) do
|
|
|
|
Agent.start_link(fn -> %{} end, name: __MODULE__)
|
|
|
|
end
|
|
|
|
|
|
|
|
@doc """
|
|
|
|
Attempt to return the value stored at `key`
|
|
|
|
"""
|
|
|
|
def get(key) do
|
|
|
|
Agent.get(__MODULE__, &Map.get(&1, key))
|
|
|
|
end
|
|
|
|
|
|
|
|
@doc """
|
|
|
|
Write the `value` under the `key`. Last writer wins.
|
|
|
|
"""
|
|
|
|
def put(key, value) do
|
|
|
|
Agent.update(__MODULE__, &Map.put(&1, key, value))
|
|
|
|
end
|
2020-12-12 02:31:51 +01:00
|
|
|
|
|
|
|
@doc """
|
|
|
|
List the contents of the cache. Useful for debugging purposes.
|
|
|
|
"""
|
|
|
|
def list() do
|
|
|
|
Agent.get(__MODULE__, & &1)
|
|
|
|
end
|
|
|
|
|
|
|
|
@doc """
|
|
|
|
Invalidate the entire cache.
|
|
|
|
"""
|
|
|
|
def clear() do
|
|
|
|
Agent.update(__MODULE__, fn _ -> %{} end)
|
|
|
|
end
|
2020-12-12 02:04:39 +01:00
|
|
|
end
|