KV cache with TTL, Replacement and Persistence support
-
define your cache module
defmodule Cache do use Mem, worker_number: 2, # (optional, default: 2) how many processes in worker pool default_ttl: 300, # (optional, default: nil) default expire seconds for set/2 maxmemory_size: "1000M", # (optional, default: nil) max memory used, support such format: [1000, "10k", "1GB", "1000 K"] maxmemory_strategy: :lru, # ([:lru, :ttl, :fifo]) strategy for cleaning memory persistence: false # (optional, default: false) whether enable persistence end
-
add this module to supervisor
defmodule MyApp.Supervisor do use Supervisor def start_link do Supervisor.start_link(__MODULE__, []) end def init([]) do [ Cache.child_spec, ] |> supervise(strategy: :one_for_one) end end
-
just use it like redis
Cache.set(:a, 1) Cache.inc(:a, 2) Cache.set(:b, 2, 200) Cache.get(:a) Cache.expire(:a, 200) Cache.ttl(:a) Cache.del(:b) Cache.flush Cache.hset(:c, :a, 2) Cache.hget(:c, :a) Cache.memory_used()