b47fcdffcb
Reviewed-on: #3
30 lines
611 B
Elixir
30 lines
611 B
Elixir
defmodule Chesstrainer.Cache.Evict do
|
|
@moduledoc """
|
|
Eviction functions for LRU cache
|
|
"""
|
|
|
|
# O(n) time, not efficient
|
|
def maybe_evict_oldest(table, max_size) do
|
|
if :ets.info(table, :size) > max_size do
|
|
case find_oldest_entry(table) do
|
|
{oldest_key, _} -> :ets.delete(table, oldest_key)
|
|
_ -> :ok
|
|
end
|
|
end
|
|
end
|
|
|
|
defp find_oldest_entry(table) do
|
|
:ets.foldl(
|
|
fn {k, _v, t}, acc ->
|
|
case acc do
|
|
nil -> {k, t}
|
|
{_, oldest_t} when t < oldest_t -> {k, t}
|
|
_ -> acc
|
|
end
|
|
end,
|
|
nil,
|
|
table
|
|
)
|
|
end
|
|
end
|