/** * @file Consistent Hashing Tool * @desc 用于节点选择时注意保持不同端逻辑的一致 */ export type Hasher = (key: string) => number; export type MemberWithReplicas = { /** 标识 */ key: string; /** 虚拟节点数 */ replicas: number; }; export default class ConsistentHash { /** Calculate hash for given key */ private hasher; /** Map: hash -> member */ private circle; /** All member (key)s */ private members; /** Map: member (key) -> replicas */ private membersReplicas; /** Sorted hashes, small to big */ private sortedHashes; constructor( /** Calculate hash for given key */ hasher?: Hasher); private updateSortedHashes; private _add; private _remove; /** Search in sortedHashes for the nearest hash of given hash value, returns its index */ private search; /** Get a member for given key. Returns null if no member exists. */ get(key: string): string | null; /** Get N members for given key. Notice: availableMembers must be a subset of members; there may not be enough members. */ getN(key: string, n: number, availableMembers?: Set): string[]; /** * Add a member. * - return `true` if added * - return `false` if already exists */ add(key: string, replicas: number): boolean; /** * Remove given member. * - return `true` if removed * - return `false` if not exist */ remove(key: string): boolean; /** Sets all members */ set(members: MemberWithReplicas[]): void; } /** Murmur3Hash 32bit */ export declare function murmur3Hash32(key: string): number;