# Copyright(c) 2015-2023 ACCESS CO., LTD. All rights reserved.
use Croma
defmodule AntikytheraCore.Ets.Memcache do
alias Croma.Result, as: R
alias Antikythera.ExecutorPool.Id, as: EPoolId
@table_name :antikythera_memcache
defun table_name() :: atom, do: @table_name
defun init() :: :ok do
AntikytheraCore.Ets.create_read_optimized_table(@table_name)
end
defun read(key :: term, epool_id :: v[EPoolId.t()]) :: R.t(term, :not_found) do
case :ets.lookup(@table_name, {epool_id, key}) do
[] -> {:error, :not_found}
[element] -> {:ok, element}
end
end
defun write(
key :: term,
value :: term,
expire_at :: integer,
prob_expire_at :: integer,
epool_id :: v[EPoolId.t()]
) :: :ok do
:ets.insert(@table_name, {{epool_id, key}, expire_at, prob_expire_at, value})
:ok
end
defun delete(key :: term, epool_id :: v[EPoolId.t()]) :: :ok do
:ets.delete(@table_name, {epool_id, key})
:ok
end
end