#rendezvous #hashing #node #generic #hasher #ahash

hrw

A simple, generic implementation of Highest Random Weight (HRW or Rendezvous) hashing

3 releases

Uses new Rust 2024

0.1.2 Aug 15, 2025
0.1.1 Aug 15, 2025
0.1.0 Aug 14, 2025

#2382 in Algorithms

Download history 51/week @ 2025-09-11 70/week @ 2025-09-18 32/week @ 2025-09-25 30/week @ 2025-10-02 38/week @ 2025-10-09 248/week @ 2025-10-16 233/week @ 2025-10-23 130/week @ 2025-10-30 59/week @ 2025-11-06 24/week @ 2025-11-13 181/week @ 2025-11-20 97/week @ 2025-11-27 51/week @ 2025-12-04 100/week @ 2025-12-11 35/week @ 2025-12-18 38/week @ 2025-12-25

233 downloads per month

MIT license

10KB
198 lines

Rendezvous (HRW) hashing over a node set with a pluggable hasher.

Example

This example demonstrates creating a Rendezvous set, adding and removing nodes, and picking a node for a key.

use hrw::Rendezvous;
let mut r = Rendezvous::from_nodes(["A", "B"]);
assert_eq!(r.len(), 2);
r.add_node("C");
assert_eq!(r.len(), 3);
r.remove_node(&"B");
assert_eq!(r.len(), 2);
let chosen = r.pick_top(&"my-key");
assert!(chosen.is_some());

hrw

A simple, generic implementation of Highest Random Weight (HRW or Rendezvous) hashing in Rust.

Features

  • Deterministic node selection for any key
  • Pluggable hashers (e.g., ahash, std)
  • Add/remove nodes at runtime
  • No external dependencies for core logic

Example

use hrw::Rendezvous;

let mut r = Rendezvous::from_nodes(["A", "B"]);
assert_eq!(r.len(), 2);
r.add_node("C");
assert_eq!(r.len(), 3);
r.remove_node(&"B");
assert_eq!(r.len(), 2);
let chosen = r.pick_top(&"my-key");
assert!(chosen.is_some());

License

MIT

No runtime deps