【Elixir】キャッシュを簡単に扱う方法: Cachex の紹介
Elixir では、Cachex という強力なキャッシュライブラリを使用することで、簡単にキャッシュを扱うことができます。
この記事では、Cachex のインストール方法と基本的な使い方を紹介します。
以下のドキュメントを参考にしています。
Cachex — Cachex v3.6.0
環境
Cachex のインストール方法
Cachex をプロジェクトに追加するには、mix.exs
ファイルの deps
関数に Cachex を追加します。
1
2
3
4
5
| def deps do
[
{:cachex, "~> 3.6"}
]
end
|
その後、ターミナルで mix deps.get
コマンドを実行して、Cachex をインストールします。
使用方法
キャッシュ定義
アプリケーションの supervision tree に Cachex キャッシュプロセスを追加します。
1
2
3
4
5
6
7
8
9
10
11
12
| defmodule Demo.Application do
use Application
def start(_type, _args) do
children = [
{Cachex, name: :my_cache}
]
opts = [strategy: :one_for_one, name: Demo.Supervisor]
Supervisor.start_link(children, opts)
end
end
|
複数のキャッシュを扱いたい時は {Cachex, name: :my_cache2}
など新たに追加することで可能です。
キャッシュ追加
キャッシュにデータを追加する。
1
2
| # キャッシュ追加(キャッシュ生存時間 5秒
Cachex.put(:my_cache, "key", "value", ttl: :timer.seconds(5))
|
キャッシュ取得
キャッシュからデータを取得する。
1
2
3
4
| case Cachex.get(:my_cache, key) do
{:ok, value} -> value # キャッシュあり
:not_found -> nil # キャッシュなし
end
|
キャッシュ削除
キャッシュを削除します
1
| Cachex.del(:my_cache, "key")
|
キャッシュにデータがない場合のデフォルト動作を定義
キャッシュにデータがない場合の動作を定義しておけます。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
| result = Cachex.fetch(:my_cache, "key", fn key ->
# データが無い場合にデータを返す
result = %{key => "test"}
#24時間有効
{:commit, result, ttl: :timer.hours(24)}
end)
case result do
{:commit, value, opt} ->
# キャッシュが登録
{:ok, value} ->
# キャッシュが存在
true ->
# その他
end
|
:commit
でキャッシュデータを入れて返します。
:ignore
を指定すると値を入れません。
複数のCacheを使う
複数のキャッシュストアを設定する際は以下のようにしてください。
単純にコピペすると同じIDで子プロセスを作るためエラーが出ます。
1
2
3
4
5
6
7
8
| children = [
# キャッシュ1
Supervisor.child_spec({Cachex, name: :cache_1}, id: :cache_1),
# キャッシュ2
Supervisor.child_spec({Cachex, name: :cache_1}, id: :cache_2)
]
|
参考