Использование кеш-систем для хранения сессий? - PullRequest
2 голосов
/ 05 февраля 2011

Скажем, у меня есть система кэширования, которую я могу использовать для хранения сессий:

// example i have a cache class
$memcached->add('key','value');
// then i can get the session from
$memcached->get('key');

Каковы преимущества и недостатки использования кэширования (например, memcached, может быть Redis может использоваться или другие вещи) для сеансов вместо использования встроенных сеансов PHP?

Ответы [ 2 ]

4 голосов
/ 05 февраля 2011

Я хочу начать с разъяснения. Когда вы используете хранилище сеансов PHP, сеансы хранятся в файле (обычно в / tmp). Каждая сессия становится отдельным файлом.

Когда вы используете memcached или redis для хранения сессий, в вашем PHP-коде ничего не меняется.

Вы можете просто настроить php на использование redis или memcache для хранения сессий (настраивается через обработчик сохранения сессии в php.ini).

Плюсы:

  • хранение / извлечение сеанса становится намного быстрее

минусы:

  • вам нужно настроить php.ini (или реализовать обработчик сохранения сеанса самостоятельно)

Теперь я бы порекомендовал использовать redis вместо memcache, просто потому, что сеансы станут постоянными, поэтому, если вам потребуется перезагрузить сервер, все ваши пользователи не будут отключены.

Для Redis: https://github.com/owlient/phpredis (см. «Обработчик сеанса» ниже на странице)

3 голосов
/ 05 февраля 2011

Вы должны иметь возможность хранить данные сеанса PHP в оперативной памяти Apache, установив session.save_handler в mm. Однако для этого вам нужно скомпилировать PHP с модулем управления памятью (--with-mm), который, как мне кажется, не доступен для Windows.

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

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

Изменить: Я наткнулся на на этой странице , где помимо скорости обсуждаются основные преимущества / недостатки использования memcached для хранения сессий, а именно:

  • Легко обмениваться сессиями между несколькими веб-серверами без использования липких сессий.
  • Однако memcached не дает никаких обещаний хранить данные до истечения срока их действия - только то, что данные будут не доступными после истечения срока действия. Поэтому, если в memcached мало памяти, он не использовался в последнее время или сервер вообще не работает, данные сеанса будут потеряны.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...