#redis #node-redis #redisearch
Вопрос:
Вопрос
Всем привет,
У меня возникла проблема при попытке взаимодействовать с Redis в этих условиях:
- Экземпляр Redis с модулем Redisearch,
- Создайте клиент node-redis до того, как будет продолжена вилка модуля Redis,
- Вилка модуля 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 я обновил сообщение с кодом.