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:

  • host the hostname or IP of your redis cluster (default "127.0.0.1")
  • port the port of your redis cluster (default 6379)
  • username passed to Redix
  • password passed to Redix
  • timeout passed to Redix
  • name optional name used to access your cluster, and also the supervision :name
  • namespace optional prefix to add to your redis keys
  • pool_size the number of Redix connections to establish per node (default 1)
  • request_opts optional Keyword list of options to pass to each Redix.command / Redix.pipeline call

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"])
# 

RedixClustered.command(:red2, ["set", "foo", "val2"])
# 

RedixClustered.command(["get", "foo"])
# 

RedixClustered.command(:red2, ["get", "foo"])
# 

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

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