index.d.ts 6.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293
  1. /// <reference types="node" />
  2. import COMMANDS from './commands';
  3. import { RedisCommand, RedisCommandArgument, RedisCommandArguments, RedisCommandRawReply, RedisCommandReply, RedisFunctions, RedisModules, RedisExtensions, RedisScript, RedisScripts, RedisCommandSignature, RedisFunction } from '../commands';
  4. import { ClientCommandOptions, RedisClientOptions, RedisClientType, WithFunctions, WithModules, WithScripts } from '../client';
  5. import { NodeAddressMap, ShardNode } from './cluster-slots';
  6. import { EventEmitter } from 'events';
  7. import { RedisClusterMultiCommandType } from './multi-command';
  8. import { PubSubListener } from '../client/pub-sub';
  9. export type RedisClusterClientOptions = Omit<RedisClientOptions, 'modules' | 'functions' | 'scripts' | 'database'>;
  10. export interface RedisClusterOptions<M extends RedisModules = Record<string, never>, F extends RedisFunctions = Record<string, never>, S extends RedisScripts = Record<string, never>> extends RedisExtensions<M, F, S> {
  11. /**
  12. * Should contain details for some of the cluster nodes that the client will use to discover
  13. * the "cluster topology". We recommend including details for at least 3 nodes here.
  14. */
  15. rootNodes: Array<RedisClusterClientOptions>;
  16. /**
  17. * Default values used for every client in the cluster. Use this to specify global values,
  18. * for example: ACL credentials, timeouts, TLS configuration etc.
  19. */
  20. defaults?: Partial<RedisClusterClientOptions>;
  21. /**
  22. * When `true`, `.connect()` will only discover the cluster topology, without actually connecting to all the nodes.
  23. * Useful for short-term or PubSub-only connections.
  24. */
  25. minimizeConnections?: boolean;
  26. /**
  27. * When `true`, distribute load by executing readonly commands (such as `GET`, `GEOSEARCH`, etc.) across all cluster nodes. When `false`, only use master nodes.
  28. */
  29. useReplicas?: boolean;
  30. /**
  31. * The maximum number of times a command will be redirected due to `MOVED` or `ASK` errors.
  32. */
  33. maxCommandRedirections?: number;
  34. /**
  35. * Mapping between the addresses in the cluster (see `CLUSTER SHARDS`) and the addresses the client should connect to
  36. * Useful when the cluster is running on another network
  37. *
  38. */
  39. nodeAddressMap?: NodeAddressMap;
  40. }
  41. type WithCommands = {
  42. [P in keyof typeof COMMANDS]: RedisCommandSignature<(typeof COMMANDS)[P]>;
  43. };
  44. export type RedisClusterType<M extends RedisModules = Record<string, never>, F extends RedisFunctions = Record<string, never>, S extends RedisScripts = Record<string, never>> = RedisCluster<M, F, S> & WithCommands & WithModules<M> & WithFunctions<F> & WithScripts<S>;
  45. export default class RedisCluster<M extends RedisModules, F extends RedisFunctions, S extends RedisScripts> extends EventEmitter {
  46. #private;
  47. static extractFirstKey(command: RedisCommand, originalArgs: Array<unknown>, redisArgs: RedisCommandArguments): RedisCommandArgument | undefined;
  48. static create<M extends RedisModules, F extends RedisFunctions, S extends RedisScripts>(options?: RedisClusterOptions<M, F, S>): RedisClusterType<M, F, S>;
  49. get slots(): import("./cluster-slots").Shard<M, F, S>[];
  50. get shards(): import("./cluster-slots").Shard<M, F, S>[];
  51. get masters(): ShardNode<M, F, S>[];
  52. get replicas(): ShardNode<M, F, S>[];
  53. get nodeByAddress(): Map<string, ShardNode<M, F, S> | import("./cluster-slots").MasterNode<M, F, S>>;
  54. get pubSubNode(): Required<import("./cluster-slots").Node<M, F, S>> | undefined;
  55. get isOpen(): boolean;
  56. constructor(options: RedisClusterOptions<M, F, S>);
  57. duplicate(overrides?: Partial<RedisClusterOptions<M, F, S>>): RedisClusterType<M, F, S>;
  58. connect(): Promise<void>;
  59. commandsExecutor<C extends RedisCommand>(command: C, args: Array<unknown>): Promise<RedisCommandReply<C>>;
  60. sendCommand<T = RedisCommandRawReply>(firstKey: RedisCommandArgument | undefined, isReadonly: boolean | undefined, args: RedisCommandArguments, options?: ClientCommandOptions): Promise<T>;
  61. functionsExecutor<F extends RedisFunction>(fn: F, args: Array<unknown>, name: string): Promise<RedisCommandReply<F>>;
  62. executeFunction(name: string, fn: RedisFunction, originalArgs: Array<unknown>, redisArgs: RedisCommandArguments, options?: ClientCommandOptions): Promise<RedisCommandRawReply>;
  63. scriptsExecutor<S extends RedisScript>(script: S, args: Array<unknown>): Promise<RedisCommandReply<S>>;
  64. executeScript(script: RedisScript, originalArgs: Array<unknown>, redisArgs: RedisCommandArguments, options?: ClientCommandOptions): Promise<RedisCommandRawReply>;
  65. MULTI(routing?: RedisCommandArgument): RedisClusterMultiCommandType<M, F, S>;
  66. multi: (routing?: RedisCommandArgument) => RedisClusterMultiCommandType<M, F, S>;
  67. SUBSCRIBE<T extends boolean = false>(channels: string | Array<string>, listener: PubSubListener<T>, bufferMode?: T): Promise<void>;
  68. subscribe: <T extends boolean = false>(channels: string | Array<string>, listener: PubSubListener<T>, bufferMode?: T | undefined) => Promise<void>;
  69. UNSUBSCRIBE<T extends boolean = false>(channels?: string | Array<string>, listener?: PubSubListener<boolean>, bufferMode?: T): Promise<void>;
  70. unsubscribe: <T extends boolean = false>(channels?: string | Array<string>, listener?: PubSubListener<boolean>, bufferMode?: T | undefined) => Promise<void>;
  71. PSUBSCRIBE<T extends boolean = false>(patterns: string | Array<string>, listener: PubSubListener<T>, bufferMode?: T): Promise<void>;
  72. pSubscribe: <T extends boolean = false>(patterns: string | Array<string>, listener: PubSubListener<T>, bufferMode?: T | undefined) => Promise<void>;
  73. PUNSUBSCRIBE<T extends boolean = false>(patterns?: string | Array<string>, listener?: PubSubListener<T>, bufferMode?: T): Promise<void>;
  74. pUnsubscribe: <T extends boolean = false>(patterns?: string | Array<string>, listener?: PubSubListener<T> | undefined, bufferMode?: T | undefined) => Promise<void>;
  75. SSUBSCRIBE<T extends boolean = false>(channels: string | Array<string>, listener: PubSubListener<T>, bufferMode?: T): Promise<void>;
  76. sSubscribe: <T extends boolean = false>(channels: string | Array<string>, listener: PubSubListener<T>, bufferMode?: T | undefined) => Promise<void>;
  77. SUNSUBSCRIBE<T extends boolean = false>(channels: string | Array<string>, listener?: PubSubListener<T>, bufferMode?: T): Promise<void>;
  78. sUnsubscribe: <T extends boolean = false>(channels: string | Array<string>, listener?: PubSubListener<T> | undefined, bufferMode?: T | undefined) => Promise<void>;
  79. quit(): Promise<void>;
  80. disconnect(): Promise<void>;
  81. nodeClient(node: ShardNode<M, F, S>): RedisClientType<M, F, S> | Promise<RedisClientType<M, F, S>>;
  82. getRandomNode(): ShardNode<M, F, S>;
  83. getSlotRandomNode(slot: number): ShardNode<M, F, S>;
  84. /**
  85. * @deprecated use `.masters` instead
  86. */
  87. getMasters(): ShardNode<M, F, S>[];
  88. /**
  89. * @deprecated use `.slots[<SLOT>]` instead
  90. */
  91. getSlotMaster(slot: number): import("./cluster-slots").MasterNode<M, F, S>;
  92. }
  93. export {};