Mem

KV cache with TTL, LRU and Persistence support

Build StatusHex.pm VersionHex.pm Downloads

Usage

  1. 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 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
  2. 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
  3. 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)

Thanks