Проблема Redis в модуле-redis-вилка

#redis #node-redis #redisearch

Вопрос:

Вопрос

Всем привет,

У меня возникла проблема при попытке взаимодействовать с Redis в этих условиях:

  1. Экземпляр Redis с модулем Redisearch,
  2. Создайте клиент node-redis до того, как будет продолжена вилка модуля Redis,
  3. Вилка модуля Redis продолжается

Поведение, которое я получаю, заключается в том, что «send_command» простаивает до тех пор, пока вилка не остановится. Когда вилка заканчивается, я получаю эту ошибку:

режим отладки ->

 Redis connection is gone from end event
 

ошибка клиента ->

 AbortError: Redis connection lost and command aborted. It might have been processed.
 

После того, как я получу эту ошибку, команды от того же клиента (без создания нового клиента) вернутся к нормальной работе.

На каждой развилке я получал одно и то же поведение.

Дополнительная информация:

 keys: 37773168,
used_memory_human: '87.31G'
 

Пример кода:

Это простое экспресс-приложение,

 'use strict';
const express = require('express');
const Redis = require('redis');
// Redis.debug_mode = true;
const router = express.Router();

let client = null;

router.get('/redisearch/connect', async (req, res, next) => {
    const conf = {
        'host': '127.0.0.1',
        'port': 6379,
        'db': 0,
    };

    try {
        if (!client) client = Redis.createClient(conf.port, conf.host, { db: conf.db });
        res.send('Connected');
    } catch (err) {
        res.send(err);
    }
});

router.get('/redisearch/d', async (req, res, next) => {
    const num = 10;
    const dArgs = ['testIndexName', `@ic:[${num} ${num}]`, 'GROUPBY', 1, '@d'];

    try {
        client.send_command('FT.AGGREGATE', dArgs, (err, reply) => {
            if (err) {
                res.send({ err: err });
            };
            res.send({ d: reply });
        });
    } catch (err) {
        res.send(err);
    }
});

module.exports = router;
 

это самый простой способ, которым я должен воспроизвести проблему.

Я не знаю, есть ли способ заставить redis использовать вилку, в моем случае она появляется после массового поиска по индексу с последующим удалением и вставкой записей.

Redis однако во время этих операций (вставка/удаление) работает нормально, я могу запускать команды из redis-cli;

При создании нового экземпляра клиента node-redis, пока присутствует вилка, все работает нормально, а когда вилка исчезает, все продолжает работать.

Окружающая среда

  • Node.js Версия: v14.15.1
  • Версия Redis: 6.0.4
  • Версия для повторного поиска: 1.6.15
  • Версия node-redis: 3.2
  • Платформа: Server 128GB RAM, 8 Core, Debian

Комментарии:

1. Не могли бы вы поделиться соответствующим кодом?

2. @LeibaleEidelman я обновил сообщение с кодом.