1
0
mirror of https://github.com/redis/node-redis.git synced 2025-08-04 15:02:09 +03:00

ref #1888 - add disableOfflineQueue (#1900)

* 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:
Leibale Eidelman
2022-02-14 15:23:18 -05:00
committed by GitHub
parent 9e904eb862
commit 6dd15d96aa
3 changed files with 6 additions and 2 deletions

View File

@@ -4,7 +4,9 @@ Nobody has *actually* asked these questions. But, we needed somewhere to put all
## 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?

View File

@@ -20,6 +20,7 @@
| 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)) |
| 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 |
| legacyMode | `false` | Maintain some backwards compatibility (see the [Migration Guide](./v3-to-v4.md)) |
| isolationPoolOptions | | See the [Isolated Execution Guide](./isolated-execution.md) |

View File

@@ -26,6 +26,7 @@ export interface RedisClientOptions<
name?: string;
database?: number;
commandsQueueMaxLength?: number;
disableOfflineQueue?: boolean;
readonly?: boolean;
legacyMode?: boolean;
isolationPoolOptions?: PoolOptions;
@@ -274,7 +275,7 @@ export default class RedisClient<M extends RedisModules, S extends RedisScripts>
.on('data', data => this.#queue.parseResponse(data))
.on('error', err => {
this.emit('error', err);
if (this.#socket.isOpen) {
if (this.#socket.isOpen && !this.#options?.disableOfflineQueue) {
this.#queue.flushWaitingForReply(err);
} else {
this.#queue.flushAll(err);