@qiniu/miku-delivery-mp-ks
Version:
Kuaishou Mini Program SDK for Miku Delivery
52 lines (51 loc) • 1.66 kB
TypeScript
/**
* @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>): 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;