В настоящее время я использую MySql для хранения своих сеансов. Он отлично работает, но немного медленный.
Меня попросили использовать Redis, но мне интересно, хорошая ли это идея, потому что я слышал, что Redis задерживает операции записи. Я немного боюсь, потому что сеансы должны быть в режиме реального времени.
Кто-нибудь сталкивался с такими проблемами?
Ответы:
Redis идеально подходит для хранения сессий. Все операции выполняются в памяти, поэтому чтение и запись будут быстрыми.
Второй аспект - это постоянство состояния сеанса. Redis дает вам большую гибкость в том, как вы хотите сохранить состояние сеанса на жестком диске. Вы можете пройти http://redis.io/topics/persistence, чтобы узнать больше, но на высоком уровне вот ваши варианты:
appendfsync always
в файле конфигурации. При этом Redis гарантирует, что любые операции записи будут сохранены на диск. Недостатком является то, что операции записи будут медленнее.appendfsync everysec
. Это даст отличную производительность с разумными гарантиями данных.источник
В основном доступны два основных типа: async snapsnots и
fsync()
. Они называются RDB и AOF соответственно. Подробнее о режимах сохранения на официальной странице .Обработка сигналов демонизированного процесса синхронизируется с диском, например, когда он получает SIGTERM, поэтому данные все еще будут там после перезагрузки. Я думаю, что демон или ОС должны выйти из строя, прежде чем вы увидите нарушение целостности, даже с настройками по умолчанию (снимки состояния RDB).
Параметр AOF использует файл только для добавления, который регистрирует команды, получаемые сервером, и воссоздает базу данных с нуля при холодном запуске из сохраненного файла. Политика синхронизации диска по умолчанию - сбросить каждую секунду (IIRC), но ее можно настроить на блокировку и запись для каждой команды.
Использование как моментальных снимков, так и инкрементного журнала, кажется, предлагает как долгосрочный подход « не возражаю, если я пропущу несколько секунд данных», так и более безопасный, но дорогостоящий добавочный журнал. Redis поддерживает кластеризацию из коробки, так что репликация, похоже, тоже возможна.
Я сам использую настройку RDB по умолчанию и сохраняю снимки на удаленном FTP. Я еще не видел сбоя, который привел к потере данных. Скорее всего, произойдет резкий отказ оборудования или отключение электроэнергии, но я размещен на VPS. Небольшой шанс, что это произойдет :)
источник
Этот вопрос действительно касается сеансов в реальном времени и, кажется, частично возник из-за неправильного понимания фразы «отложенные операции записи». Хотя подробности в конечном итоге были раскрыты в комментариях, я просто хотел сделать его супер-пупер ясным. ..
У вас не возникнет проблем с реализацией сессий в реальном времени.
Redis - это хранилище ключей и значений в памяти с возможностью сохранения на диске. «Операции отложенной записи» относятся к записи на диск , а не в базу данных в целом, которая существует в памяти. Если вы установите пару ключ / значение, вы можете ПОЛУЧИТЬ ее немедленно (т.е. в реальном времени). Политика, которую вы выбираете в отношении постоянства (насколько вы откладываете запись), будет определять верхнюю границу того, сколько данных может быть потеряно в случае сбоя.
источник