RedixClustered

Cluster support for Redix, and other stuff! Currently:

  1. Very WIP
  2. Needs documentation
  3. The pipelines aren't smart enough to deal with keys on different nodes

Ported from some other PRX applications, and working to improve.

Installation

Add redix_clustered to your list of dependencies in mix.exs:

def deps do
  [
    {:redix_clustered, "~> 1.0.0"}
  ]
end

Then just add your cluster as a child of your application:

children = [
  {RedixClustered, host: "127.0.0.1", port: 6379, namespace: "my-ns"}
]

Options you can pass to the RedixClustered spec:

And then you can run commands/pipelines:

{:ok, _pid} = RedixClustered.start_link()
{:ok, _pid} = RedixClustered.start_link(name: :red2, namespace: "ns2")

RedixClustered.command(["set", "foo", "val1"])
# {:ok, "OK"}

RedixClustered.command(:red2, ["set", "foo", "val2"])
# {:ok, "OK"}

RedixClustered.command(["get", "foo"])
# {:ok, "val1"}

RedixClustered.command(:red2, ["get", "foo"])
# {:ok, "val2"}

RedixClustered.command(:red2, ["get", "ns2:foo"], namespace: false)
# {:ok, "val2"}

Or if you want to clone set commands to a 2nd redis cluster:

clone = [host: "127.0.0.2", port: 6380, namespace: "ns2"]

children = [
  {RedixClustered, host: "127.0.0.1", namespace: "ns1", clone: clone}
]

License

MIT License

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