Skip to content

mlooney/exredis

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

236 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

exredis Build Status Hex.pm


Redis client for Elixir.


Installation

Add this to the dependencies:

{:exredis, ">= 0.2.2"}

Configuration

In your applications config.exs file you need to add new section for customizing redis connection.

config :exredis,
  host: "127.0.0.1",
  port: 6379,
  password: "",
  db: 0,
  reconnect: :no_reconnect,
  max_queue: :infinity

or

config :exredis,
  url: "redis://user:password@host:1234/10",
  reconnect: :no_reconnect,
  max_queue: :infinity

Usage (web docs)

As mixin

defmodule Pi do
  import Exredis

  def get, do: start_link |> elem(1) |> query ["GET", "Pi"]
  def set, do: start_link |> elem(1) |> query ["SET", "Pi", "3.14"]
end

Pi.set
# => "OK"

Pi.get
# => "3.14"
defmodule Api do
  import Exredis.Api

  def set(client), do:
    client |> set "key", "value"

  def get(client), do:
    client |> get "key"

end

{:ok, client} = Exredis.start_link

client |> Api.set
# => "OK"

client |> Api.get
# => "value"

Connect to the Redis server

{:ok, client} = Exredis.start_link
# or
client = Exredis.start_using_connection_string("redis://127.0.0.1:6379")

Disconnect from the server

client |> Exredis.stop

Set & Get

# set
client |> Exredis.query ["SET", "FOO", "BAR"]

# get
client |> Exredis.query ["GET", "FOO"]
# => "BAR"

Mset & Mget

# mset
client |> Exredis.query ["MSET" | ["key1", "value1", "key2", "value2", "key3", "value3"]]

# mget
client |> Exredis.query ["MGET" | ["key1", "key2", "key3"]]
# => ["value1", "value2", "value3"]

Transactions

# start
client |> Exredis.query ["MULTI"]

# exec
client |> Exredis.query ["SET", "foo", "bar"]
client |> Exredis.query ["SET", "bar", "baz"]

# commit
client |> Exredis.query ["EXEC"]

Pipelining

client |> Exredis.query_pipe [["SET", :a, "1"], ["LPUSH", :b, "3"], ["LPUSH", :b, "2"]]

Pub/sub

{:ok, client_sub} = Exredis.Sub.start_link
{:ok, client} = Exredis.start_link
pid = Kernel.self

client_sub |> Exredis.Sub.subscribe "foo", fn(msg) ->
  send(pid, msg)
end

receive do
  msg ->
    IO.inspect msg
    # => {:subscribed, "foo", #PID<0.85.0>}
end

client |> Exredis.Api.publish "foo", "Hello World!"

receive do
  msg ->
    IO.inspect msg
    # => {:message, "foo", "Hello World!", #PID<0.85.0>}
end

Pub/sub by a pattern

{:ok, client_sub} = Exredis.Sub.start_link
{:ok, client} = Exredis.start_link
pid = Kernel.self

client_sub |> Exredis.Sub.psubscribe "bar_*", fn(msg) ->
  send(pid, msg)
end

receive do
  msg ->
    IO.inspect msg
    # => {:subscribed, "bar_*", #PID<0.104.0>}
end

client |> Exredis.Api.publish "bar_test", "Hello World!"

receive do
  msg ->
    IO.inspect msg
    # => {:pmessage, "bar_*", "bar_test", "Hello World!", #PID<0.104.0>}
end

Scripting

client |> Exredis.Api.script_load "return 1 + 1"
# => "c301e0c5bc3538d2bad3fdbf2e281887e643ada4"
client |> Exredis.Api.evalsha "c301e0c5bc3538d2bad3fdbf2e281887e643ada4", 0, ["key1"], ["argv1"]
# => "2"

defmodule MyScripts do
  import Exredis.Script

  defredis_script :lua_echo, "return ARGV[1]"
  defredis_script :huge_command, file_path: "lua_scripts/huge_command.lua"
end

client |> MyScripts.lua_echo(["mykey"], ["foo"])
# => "foo"

Contributing

  1. Fork it
  2. Create your feature branch (git checkout -b my-new-feature)
  3. Commit your changes (git commit -am 'add some feature')
  4. Push to the branch (git push origin my-new-feature)
  5. Create new Pull Request

About

Redis client for Elixir

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages

  • Elixir 100.0%