Я давно использую node-redis и пока все хорошо. Однако после настройки новой среды у меня была опечатка на имя хоста (или пароль), и он не мог подключиться. Но поскольку это было уже работающее приложение, которое я когда-то разработал go, было довольно сложно отследить реальную проблему. Когда вы выполняете запросы к этому серверу, он просто берет тайм-аут сервера, который составляет 5 минут, и возвращается с ошибкой 500.
В конце я обнаружил, что это были учетные данные для сервера redis. Я использую Redis для ускорения работы моего приложения, предотвращая повторную проверку токенов безопасности в течение часа (поскольку процесс проверки может занять до 2000 мс), поэтому я сохраняю токен в Redis для будущих запросов.
Это сработало Впрочем, это было хорошо в течение многих лет, просто потому, что на этот раз у меня была опечатка с именем хоста или паролем, я заметил, что, если сервер redis не может подключиться (по любой причине), все приложение выходит из строя. Идея состоит в том, что следует использовать redis, если он доступен, если нет, то он должен использовать запасной вариант, чтобы просто взять длинный маршрут, но в любом случае выполнить запрос.
Поэтому мой вопрос заключается в том, как заставить узел-redis выдавать ошибку как как можно скорее, а не ждать появления ошибки ETIMEOUT?
Например:
const client = redis.createClient(6380, "redis.host.com", { password: "verystrongone" } });
client.on("error", err => {
console.log(err)
})
На основе этого кода я получаю сообщение об ошибке console.log ПОСЛЕ того, как истечет время ожидания (около 30- 40 секунд). Это не хорошо, потому что тогда мое приложение по крайней мере 30 секунд не отвечает. Чего я хочу добиться, так это того, что если redis не работает или что-то еще, он должен просто сдаться через 2-5 секунд. Я использую очень быстрый и надежный сервер redis с Azure. Для подключения требуется менее секунды, и я никогда не отказывал, я полагаю, что если это произойдет, то для этого потребуется целое приложение.
Я пробовал что-то вроде retry_strategy
, но я считаю, что этот параметр срабатывает только после первоначальной попытки ~ 30 секунд.
Есть предложения?