Я думал об использовании memcached хранить сессии вместо MySQL, который походил на хорошую идею, сначала.
Когда дело доходит до части обработки отказа использования memcached серверы, Это немного вызывает беспокойство, что мои сессии прекратят работать, если memcached пошел бы офлайн. Это будет, конечно, влиять на моих пользователей.
Существует несколько методов, которые мы уже используем для сокращения обработки отказа, включая имение в наличии пула серверов для компенсации в случае времени простоя, используя sharding/consistent хеширующий через пул сервера и так далее. Мы также сделали бы своего рода постепенное ухудшение, которое говорит пользователям, что что-то пошло не так, как надо, и они могут войти в систему снова, в случае их выгоняемый из-за memcached обработки отказа сервера.
Таким образом, как люди обычно занимаются этими проблемами при хранении сессий на memcached серверах?
Вы можете создать отказоустойчивый метод, используя как db, так и memcached. Проверьте, находится ли ваш объект memcached в памяти, иначе сохраните сеанс в базе данных, затем создайте экземпляр memcache. Просто убедитесь, что при выходе / выходе он сбрасывает / удаляет memcached ...
Так что сначала проверьте memcached, если не удалось, проверьте db ... :)
Во-первых, если вы помещаете что-то только в кэш памяти, вы должны нормально потерять это. Для всего остального есть постоянное хранилище.
Во-вторых, memcached просто не очень часто дает сбой. Нет никаких движущихся частей, таких как дисковые пластины. Единственный раз, когда я терял сеансы, это было из-за перезагрузки для обновлений ядра. Но проиграть эти сессии не было большой проблемой из-за первого очка.
Итак, чтобы ответить прямо на ваш вопрос, если данные можно потерять, их можно сохранить только в сеансе кэша памяти. Если проигрывать неприемлемо, сохраните его в постоянном хранилище и, возможно, кешируйте в кэше памяти для ускорения.