Обмен стеками.Redis StringGetAsync возвращает нулевое значение

#c# #.net #redis #stackexchange.redis #redis-sentinel

Вопрос:

Установка

Использование 2 серверов Redis в Linux в производстве

Использование Sentinel для обеспечения высокой доступности

Обмен стеками.Версия пакета Redis Nuget-1.2.6

Служба Windows .NET 4.5 использует кэш Redis.

Служба Windows находится в системе балансировки нагрузки.

Поток приложений

Шаг 1

Первый запрос содержит запрос на утверждение, идущий от клиента к конечной точке. Уникальный идентификатор транзакции генерируется и сохраняется (срок действия составляет 60 минут) в кэше Redis для следующего запроса на изменение

Шаг 2 Запрос на внесение изменений отправляется клиентом в течение нескольких минут после запроса на утверждение. Идентификатор транзакции, сохраненный на предыдущем шаге, необходимо извлечь из службы Redis и прикрепить к запросу на изменение, который будет отправлен в конечную точку.

Проблема, с которой мы сталкиваемся, заключается в том, что во время запроса на изменение поиск уникального идентификатора транзакции завершается ошибкой и возвращает нулевое значение. Мы используем метод StringGetAsync для получения значения из кэша Redis. Это работает в большинстве случаев, и некоторые из них терпят неудачу.

Эти два шага могут быть выполнены на любом из серверов фермы. У нас есть журналы, чтобы убедиться, что установка значения в службе Redis возвращает значение true.

Информация журналов Redis ограничена операциями синхронизации.

Нужна помощь в устранении неполадок/решении этой проблемы.

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

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

Ответ №1:

Спасибо за ответ. При дальнейшем расследовании выяснилось, что служба Sentinel находилась в остановленном состоянии на всех серверах Redis. Запуск службы Sentinel решил проблему.