# `HRW`

HRW (Highest Random Weight), also known as rendezvous hashing, maps a key
to a node out of a set in a way that stays stable when nodes are added or
removed.

This module is stateless. For O(log n) lookups over large node sets, see
`HRW.Skeleton`.

# `owner`

```elixir
@spec owner(term(), [term()], keyword()) :: term()
```

Returns the node responsible for `key`.

Each node is hashed together with the key; the highest-scoring node wins.

## Options

  * `:hash_fn` - a function `term -> integer`. Defaults to `&:erlang.phash2/1`.

## Examples

    iex> HRW.owner("192.168.0.1", ["server1", "server2", "server3"])
    "server2"

# `owners`

```elixir
@spec owners(term(), [term()], non_neg_integer(), keyword()) :: [term()]
```

Returns the top `count` nodes responsible for `key`, in descending weight order.

## Options

  * `:hash_fn` - a function `term -> integer`. Defaults to `&:erlang.phash2/1`.

## Examples

    iex> HRW.owners("192.168.0.1", ["server1", "server2", "server3"], 2)
    ["server2", "server3"]

---

*Consult [api-reference.md](api-reference.md) for complete listing*
