@valkey/client
Version:
The source code and documentation for this package are in the main [node-redis](https://github.com/redis/node-redis) repo.
62 lines (61 loc) • 3.14 kB
TypeScript
/// <reference types="node" />
/// <reference types="node" />
import { ValkeyClientType } from "../client";
import { ValkeyClusterOptions } from ".";
import { ValkeyCommandArgument, ValkeyFunctions, ValkeyModules, ValkeyScripts } from "../commands";
import { ChannelListeners } from "../client/pub-sub";
import { EventEmitter } from "stream";
interface NodeAddress {
host: string;
port: number;
}
export type NodeAddressMap = {
[address: string]: NodeAddress;
} | ((address: string) => NodeAddress | undefined);
type ValueOrPromise<T> = T | Promise<T>;
type ClientOrPromise<M extends ValkeyModules, F extends ValkeyFunctions, S extends ValkeyScripts> = ValueOrPromise<ValkeyClientType<M, F, S>>;
export interface Node<M extends ValkeyModules, F extends ValkeyFunctions, S extends ValkeyScripts> {
address: string;
client?: ClientOrPromise<M, F, S>;
}
export interface ShardNode<M extends ValkeyModules, F extends ValkeyFunctions, S extends ValkeyScripts> extends Node<M, F, S> {
id: string;
host: string;
port: number;
readonly: boolean;
}
export interface MasterNode<M extends ValkeyModules, F extends ValkeyFunctions, S extends ValkeyScripts> extends ShardNode<M, F, S> {
pubSubClient?: ClientOrPromise<M, F, S>;
}
export interface Shard<M extends ValkeyModules, F extends ValkeyFunctions, S extends ValkeyScripts> {
master: MasterNode<M, F, S>;
replicas?: Array<ShardNode<M, F, S>>;
nodesIterator?: IterableIterator<ShardNode<M, F, S>>;
}
export type PubSubNode<M extends ValkeyModules, F extends ValkeyFunctions, S extends ValkeyScripts> = Required<Node<M, F, S>>;
export type OnShardedChannelMovedError = (err: unknown, channel: string, listeners?: ChannelListeners) => void;
export default class ValkeyClusterSlots<M extends ValkeyModules, F extends ValkeyFunctions, S extends ValkeyScripts> {
#private;
slots: Shard<M, F, S>[];
shards: Shard<M, F, S>[];
masters: ShardNode<M, F, S>[];
replicas: ShardNode<M, F, S>[];
readonly nodeByAddress: Map<string, ShardNode<M, F, S> | MasterNode<M, F, S>>;
pubSubNode?: PubSubNode<M, F, S>;
get isOpen(): boolean;
constructor(options: ValkeyClusterOptions<M, F, S>, emit: EventEmitter["emit"]);
connect(): Promise<void>;
nodeClient(node: ShardNode<M, F, S>): ClientOrPromise<M, F, S>;
rediscover(startWith: ValkeyClientType<M, F, S>): Promise<void>;
quit(): Promise<void>;
disconnect(): Promise<void>;
getClient(firstKey: ValkeyCommandArgument | undefined, isReadonly: boolean | undefined): ClientOrPromise<M, F, S>;
getRandomNode(): ShardNode<M, F, S>;
getSlotRandomNode(slotNumber: number): ShardNode<M, F, S>;
getMasterByAddress(address: string): ClientOrPromise<M, F, S> | undefined;
getPubSubClient(): ClientOrPromise<M, F, S>;
executeUnsubscribeCommand(unsubscribe: (client: ValkeyClientType<M, F, S>) => Promise<void>): Promise<void>;
getShardedPubSubClient(channel: string): ClientOrPromise<M, F, S>;
executeShardedUnsubscribeCommand(channel: string, unsubscribe: (client: ValkeyClientType<M, F, S>) => Promise<void>): Promise<void>;
}
export {};