Packages

Memcache client for Elixir with support for pipelining

Current section

Files

Jump to
memcached lib memcache.ex
Raw

lib/memcache.ex

defmodule Memcache do
alias Memcache.CommandBatch
alias Memcache.Connection
alias Memcache.ConnectionPool
def connect(opts \\ []) do
Connection.start_link(opts)
end
def flush_all(connection_or_batch, exptime \\ 0) do
command(connection_or_batch, {:flush_all, exptime})
end
def set(connection_or_batch, key, value, exptime \\ 0) do
flags = 0
command(connection_or_batch, {:set, key, value, flags, exptime})
end
def add(connection_or_batch, key, value, exptime \\ 0) do
flags = 0
command(connection_or_batch, {:add, key, value, flags, exptime})
end
def replace(connection_or_batch, key, value, exptime \\ 0) do
flags = 0
command(connection_or_batch, {:replace, key, value, flags, exptime})
end
def append(connection_or_batch, key, value) do
flags = 0
exptime = 0
command(connection_or_batch, {:append, key, value, flags, exptime})
end
def prepend(connection_or_batch, key, value) do
flags = 0
exptime = 0
command(connection_or_batch, {:prepend, key, value, flags, exptime})
end
def cas(connection_or_batch, key, value, cas_unique, exptime \\ 0) do
flags = 0
command(connection_or_batch, {:cas, key, value, cas_unique, flags, exptime})
end
def get(connection_or_batch, key) do
command(connection_or_batch, {:get, key})
end
def gets(connection_or_batch, key) do
command(connection_or_batch, {:gets, key})
end
def delete(connection_or_batch, key) do
command(connection_or_batch, {:delete, key})
end
def incr(connection_or_batch, key, value) do
command(connection_or_batch, {:incr, key, value})
end
def decr(connection_or_batch, key, value) do
command(connection_or_batch, {:decr, key, value})
end
def touch(connection_or_batch, key, exptime \\ 0) do
command(connection_or_batch, {:touch, key, exptime})
end
def gat(connection_or_batch, key, exptime \\ 0) do
command(connection_or_batch, {:gat, key, exptime})
end
def gats(connection_or_batch, key, exptime \\ 0) do
command(connection_or_batch, {:gats, key, exptime})
end
def meta_debug(connection_or_batch, key) do
command(connection_or_batch, {:me, key})
end
def meta_get(connection_or_batch, key, flags \\ []) do
command(connection_or_batch, {:mg, key, flags})
end
def meta_set(connection_or_batch, key, value, flags \\ []) do
command(connection_or_batch, {:ms, key, value, flags})
end
def meta_delete(connection_or_batch, key, flags \\ []) do
command(connection_or_batch, {:md, key, flags})
end
def meta_arithmetic(connection_or_batch, key, flags \\ []) do
command(connection_or_batch, {:ma, key, flags})
end
def meta_noop(connection_or_batch) do
command(connection_or_batch, {:mn})
end
defp command(connection, command) when is_pid(connection) do
batch = CommandBatch.new() |> CommandBatch.add(command) |> CommandBatch.to_list()
case Connection.execute(connection, batch) do
[result] -> result
end
end
defp command(pool, command) when is_atom(pool) do
{:ok, connection} = ConnectionPool.select_connection(pool)
command(connection, command)
end
defp command(batch, command) when is_list(batch) do
CommandBatch.add(batch, command)
end
def batch do
CommandBatch.new()
end
def execute(batch, connection) do
batch = CommandBatch.to_list(batch)
Connection.execute(connection, batch)
end
end