/redis_z

Pooling & sharding support parallel Redis adapter base on Redix.

Primary LanguageElixirGNU General Public License v3.0GPL-3.0

Actions Status Coverage Status Hex.pm

RedisZ - Redis Super

Pooling & sharding support parallel Redis adapter base on Redix.

Usage

Start RedisZ in your application.

defmodule Example.Application do
  @moduledoc false

  use Application

  def start(_type, _args) do
    children = [
      {RedisZ, name: Example.Redis, pool_size: 4, urls: ["redis://localhost/0", "redis://localhost/1"]},
    ]

    opts = [strategy: :one_for_one, name: Orange.Supervisor]
    Supervisor.start_link(children, opts)
  end
end

Call RedisZ like Redix.

"OK" = RedisZ.command!(Example.Redis, ["SETEX", "mykey", 10, "Hello"])
[10, "Hello"] = RedisZ.pipeline!(Example.Redis, [["TTL", "mykey"], ["GET", "mykey"]])

You can specify shard like Redis Cluster. {momonga}1 & {momonga}2 are stored at the same shard.

["OK", "OK"] = RedisZ.pipeline!(Example.Redis, ["SET", "{momonga}1", "Hello"], ["SET", "{momonga}2", "Hello"])

Installation

Add :redis_z at mix.exs.

def deps do
  [
    {:redis_z, "~> 0.3"}
  ]
end

Architecture

processes

TODO

  • Redis sentinel support.
  • Redis cluster support.
  • Online resharding.
  • Controll connection pool size dynamically.
  • Support commands for multiple shards.
  • MULTI EXEC support.
  • BLPOP BRPOP BRPOPLPUSH support.
  • SCAN support
  • PubSub support. Use Redix.PubSub & Phoenix.PubSub.RedisZ.