Skip to content

ConsistentHash API

Constructor

typescript
new ConsistentHash(config?: Partial<HashConfig>)

Parameters

ParamTypeDefaultDescription
config.virtualNodesnumber150Number of virtual nodes per physical node

Methods

getNode(key: string): HashNode | null

Find the node responsible for a key.

typescript
const node = hash.getNode("user:123");
console.log(node?.id); // "node-1"

addNode(node: HashNode): void

Add a node to the hash ring.

typescript
hash.addNode({ id: "node-3" });

removeNode(nodeId: string): void

Remove a node from the hash ring.

typescript
hash.removeNode("node-1");

getKeyDistribution(): Map<string, number>

Get the number of keys per node.

typescript
const distribution = hash.getKeyDistribution();
console.log(distribution);
// Map { "node-0" => 365, "node-1" => 346, "node-2" => 289 }

getRingSize(): number

Get the total number of virtual nodes on the ring.

typescript
const size = hash.getRingSize();
console.log(size); // 450 (3 nodes × 150 virtual nodes)

hasNode(nodeId: string): boolean

Check if a node exists on the ring.

typescript
if (hash.hasNode("node-0")) {
  // node exists
}

getNodes(): HashNode[]

Get all physical nodes on the ring.

typescript
const nodes = hash.getNodes();
console.log(nodes); // [{ id: "node-0" }, { id: "node-1" }, ...]

Interfaces

HashNode

typescript
interface HashNode {
  id: string;
}

HashConfig

typescript
interface HashConfig {
  virtualNodes: number; // default: 150
}

Released under the MIT License.