You've already forked node-redis
mirror of
https://github.com/redis/node-redis.git
synced 2025-08-04 15:02:09 +03:00
* ref #1888 - add disableOfflineQueue * fix flushQueuesOnError * update docs Co-authored-by: Guy Royse <guy@guyroyse.com> Co-authored-by: Guy Royse <guy@guyroyse.com>
This commit is contained in:
@@ -4,7 +4,9 @@ Nobody has *actually* asked these questions. But, we needed somewhere to put all
|
|||||||
|
|
||||||
## What happens when the network goes down?
|
## What happens when the network goes down?
|
||||||
|
|
||||||
When a socket closed unexpectedly, all the commands that were already sent will reject as they might have been executed on the server. The rest will remain queued in memory until a new socket is established. If the client is closed—either by returning an error from [`reconnectStrategy`](./client-configuration.md#reconnect-strategy) or by manually calling `.disconnect()`—they will be rejected.
|
When a socket closes unexpectedly, all the commands that were already sent will reject as they might have been executed on the server. The rest will remain queued in memory until a new socket is established. If the client is closed—either by returning an error from [`reconnectStrategy`](./client-configuration.md#reconnect-strategy) or by manually calling `.disconnect()`—they will be rejected.
|
||||||
|
|
||||||
|
If don't want to queue commands in memory until a new socket is established, set the `disableOfflineQueue` option to `true` in the [client configuration](./client-configuration.md). This will result in those commands being rejected.
|
||||||
|
|
||||||
## How are commands batched?
|
## How are commands batched?
|
||||||
|
|
||||||
|
@@ -20,6 +20,7 @@
|
|||||||
| modules | | Object defining which [Redis Modules](../README.md#packages) to include |
|
| modules | | Object defining which [Redis Modules](../README.md#packages) to include |
|
||||||
| scripts | | Object defining Lua Scripts to use with this client (see [Lua Scripts](../README.md#lua-scripts)) |
|
| scripts | | Object defining Lua Scripts to use with this client (see [Lua Scripts](../README.md#lua-scripts)) |
|
||||||
| commandsQueueMaxLength | | Maximum length of the client's internal command queue |
|
| commandsQueueMaxLength | | Maximum length of the client's internal command queue |
|
||||||
|
| disableOfflineQueue | `false` | Disables offline queuing, see the [FAQ](./FAQ.md#what-happens-when-the-network-goes-down) for details |
|
||||||
| readonly | `false` | Connect in [`READONLY`](https://redis.io/commands/readonly) mode |
|
| readonly | `false` | Connect in [`READONLY`](https://redis.io/commands/readonly) mode |
|
||||||
| legacyMode | `false` | Maintain some backwards compatibility (see the [Migration Guide](./v3-to-v4.md)) |
|
| legacyMode | `false` | Maintain some backwards compatibility (see the [Migration Guide](./v3-to-v4.md)) |
|
||||||
| isolationPoolOptions | | See the [Isolated Execution Guide](./isolated-execution.md) |
|
| isolationPoolOptions | | See the [Isolated Execution Guide](./isolated-execution.md) |
|
||||||
|
@@ -26,6 +26,7 @@ export interface RedisClientOptions<
|
|||||||
name?: string;
|
name?: string;
|
||||||
database?: number;
|
database?: number;
|
||||||
commandsQueueMaxLength?: number;
|
commandsQueueMaxLength?: number;
|
||||||
|
disableOfflineQueue?: boolean;
|
||||||
readonly?: boolean;
|
readonly?: boolean;
|
||||||
legacyMode?: boolean;
|
legacyMode?: boolean;
|
||||||
isolationPoolOptions?: PoolOptions;
|
isolationPoolOptions?: PoolOptions;
|
||||||
@@ -274,7 +275,7 @@ export default class RedisClient<M extends RedisModules, S extends RedisScripts>
|
|||||||
.on('data', data => this.#queue.parseResponse(data))
|
.on('data', data => this.#queue.parseResponse(data))
|
||||||
.on('error', err => {
|
.on('error', err => {
|
||||||
this.emit('error', err);
|
this.emit('error', err);
|
||||||
if (this.#socket.isOpen) {
|
if (this.#socket.isOpen && !this.#options?.disableOfflineQueue) {
|
||||||
this.#queue.flushWaitingForReply(err);
|
this.#queue.flushWaitingForReply(err);
|
||||||
} else {
|
} else {
|
||||||
this.#queue.flushAll(err);
|
this.#queue.flushAll(err);
|
||||||
|
Reference in New Issue
Block a user