Насколько безопасно хранить сеанс с Redis?

В настоящее время я использую db (mysql) для хранения моих сеансов. Он отлично работает, но он немного медленный.

Меня попросили использовать Redis, но мне интересно, хорошие ли идеи, потому что я слышал, что Redis задерживает операции записи, поэтому я немного боюсь, потому что сеансы должны быть реальными.

У вас возникли такие проблемы?

Ответ 1

Redis идеально подходит для хранения сеансов. Все операции выполняются в памяти, и поэтому чтение и запись будут быстрыми.

Второй аспект - сохранение состояния сеанса. Redis дает вам большую гибкость в том, как вы хотите сохранить состояние сеанса на своем жестком диске. Вы можете пройти http://redis.io/topics/persistence, чтобы узнать больше, но на высоком уровне, вот ваши варианты -

  • Если вы не можете позволить себе потерять какие-либо сеансы, установите appendfsync always в свой файл конфигурации. При этом Redis гарантирует, что любые операции записи сохраняются на диске. Недостатком является то, что операции записи будут медленнее.
  • Если вы потеряли около 1 столетия, используйте appendfsync everysec. Это даст отличную производительность с разумными гарантиями данных.

Ответ 2

В основном доступны два основных типа: асинхронные snapsnots и fsync(). Их называют RDB и AOF соответственно. Подробнее о режимах сохранения на официальной странице.

Обработка сигналов демонанизированного процесса синхронизируется с диском, когда он получает SIGTERM, например, данные будут по-прежнему присутствовать после перезагрузки. Я думаю, что демон или ОС должны потерпеть крах, прежде чем вы увидите повреждение целостности даже с настройками по умолчанию (снимки RDB).

В настройке AOF используется файл Append Only, который регистрирует команды, которые получает сервер, и воссоздает БД с нуля при холодном запуске из сохраненного файла. Стандартная политика синхронизации диска - очистка раз в секунду (IIRC), но может быть установлена ​​для блокировки и записи каждой команды.

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

Я сам использую настройку RDB по умолчанию и сохраняю снимки для удаленного FTP. Я еще не видел сбоя, который повлек за собой потерю данных. Скорее всего, произойдет острая аппаратная сбой или перебои в подаче электроэнергии, но я размещен на VPS. Тонкий шанс на это:)