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


в настоящее время я использую MySql для хранения моих сессий. Он отлично работает, но это немного медленно.

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

кто-нибудь испытывал подобные проблемы?

3 68

3 ответа:

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

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

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

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

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

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

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

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

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

у вас не будет проблем с реализацией сеансов в реальном времени.

Redis представляет собой в памяти хранилище значений Ключей с дополнительным сохранением на диске. 'Отложенная запись операции " относится к пишет на диск, а не базы в целом, которая существует в памяти. Если вы установите пару ключ / значение, вы можете получить его немедленно (т. е. в режиме реального времени). Политика, которую вы выберете в отношении сохраняемости (сколько вы задерживаете запись), определит верхнюю границу для того, сколько данных может быть потеряно при сбое.