Репликация срока действия Redis на ведомые устройства - PullRequest
1 голос
/ 28 мая 2020

Меня интересует использование Redis для хранения сеанса клиента на стороне сервера для авторизации. Обычно, когда клиент входит в систему, ha sh будет храниться в кластере Redis, а ключ будет возвращен клиенту. По каждому запросу клиент будет передавать ключ в виде заголовка, и служба будет проверять, что ha sh все еще существует в Redis, если это не так, будет возвращено сообщение об ошибке. Срок действия этого ключа истечет через X минут, что приведет к сбою любых запросов, использующих этот ключ. Однако я читал в Интернете, что некоторые люди испытывали проблемы из-за того, как истечение срока реплицируется на ведомые устройства. Подчиненные устройства истекают ключом только тогда, когда они получают команду del от мастера, поэтому, если "get" выполняется на подчиненном устройстве перед этой командой, значение этого ключа будет возвращено.

https://github.com/antirez/redis/issues/187

Проблема все еще существует? Мне это кажется большой проблемой и может создать небольшую дыру в безопасности. Может быть, это не проблема для устаревших данных, но при использовании для авторизации это большая проблема

1 Ответ

2 голосов
/ 29 мая 2020

A) нет, не совсем - с 2014 года GET ключа с истекшим сроком действия будет возвращать «не найден» на ведомом устройстве, даже если ведомое устройство еще не получило DEL из потока репликации. Неурегулированная проблема связана с несовместимостью EXISTS с GET, что имеет значение только в том случае, если вы полагаетесь на вывод команды EXISTS.

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

...