# Hash Ring

[![ Version](](

A pure Elixir consistent hash ring implemention based on the excellent [C hash-ring lib](
by [Chris Moos](

It does not try to performantly build the hash ring, but provides  fast node lookup. It deliberately does not provide encapsulation
within a `GenServer` and leaves that up to the user. At [Discord]( we found using a `GenServer` for such
frequently accessed data proved to be overwhelming so we rewrote the hash ring in pure Elixir and paired it with
[FastGlobal]( to allow the calling process to use it's CPU time to interact with
the hash ring and therefore avoiding overloading a central GenServer.

## Usage

Add it to `mix.exs`.

defp deps do
  [{:ex_hash_ring, "~> 1.0"}]

Create a new HashRing.

ring =
{:ok, ring} = HashRing.add_node(ring, "a")
{:ok, ring} = HashRing.add_node(ring, "b")

Find the node for a key.

"a" = HashRing.find_node(ring, "key1")
"b" = HashRing.find_node(ring, "key3")

## License

Hash Ring is released under [the MIT License](LICENSE).
Check [LICENSE](LICENSE) file for more information.