Заменить PHP-сессии

0

У меня есть приложение типа социальной сети, над которым я работаю как минимум 2 года, мне нужно, чтобы он хорошо масштабировался, поэтому я приложил много усилий для совершенствования кода этого приложения. Я использую сеансы очень часто для кэширования результатов базы данных для пользователя, когда пользователь регистрируется на сайте, который я кэширую там идентификатор пользователя, имя пользователя, статус/роль юрэра, URL-адрес фотографии, статус онлайн, время последней активности и ряд других вещей в переменных сеанса/массив. Теперь у меня есть 2 отдельных сервера для обработки этого сайта, 1 сервер для веб-сервера apache и отдельный сервер для mysql. Теперь я начинаю использовать memcache в некоторых областях, чтобы сократить нагрузку на базу данных.

Теперь мои сеансы хранятся на диске, и я знаю, что некоторые люди используют базу данных для хранения данных сеансов, для меня казалось бы, что сохранение данных сеанса, которые я кэшировал из mysql, как бы проиграл бы цель, если бы я переключился на хранилища в mysql. ТАК, что мне здесь не хватает? Почему люди предпочитают использовать базу данных для сеансов?

Вот мои идеи, используя базу данных для сеансов, облегчит хранение и доступ к сеансам на нескольких серверах, является ли это основной причиной использования базы данных?

Также следует ли использовать memcache для хранения временных переменных вместо их хранения в сеанс?

Теги:
session
memcached

4 ответа

1
Лучший ответ

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

Посмотрите PHP set_save_handler() для установки специального обработчика сеанса. Требуется около 30 строк, чтобы установить один из них, который помещает сеанс в базу данных, хотя это не означает, что строки делают достойный обработчик базы данных.:-) Вам нужно будет сделать:

ini_set('session.save_handler', 'user');
ini_set('session.auto_start', '0');

... хотя session.auto_start должен быть в вашем php.ini(и установлен в 0).

Если доступ к базе данных будет немного дорогим, вы можете сделать некоторые другие действия, чтобы уменьшить это. Очевидным является наличие сервера БД, который предназначен только для сеансов. Другой трюк заключается в том, чтобы заставить его вытолкнуть материал как в memcache, так и в базу данных, поэтому, когда он проверяет, если запись memcache отсутствует, она просто возвращается к БД. Вы тоже могли бы полюбоваться этим и разделить сеанс, поэтому некоторые из них находятся в memcache, а остальные - в базе данных. Я думаю, вам нужно будет использовать свои собственные функции доступа поверх API сеансов PHP.

2

Одна часть пакета Zend Server - это демон сеанса.

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

Обнаружено это на slideshare о создании собственного сеансового сервера с php-cli.

  • 0
    Вот почему я не рекомендую использовать memcache для сессий. Людям не нравится выходить из системы, потому что в кеше не хватает места. :-)
2

PHP имеет возможность использовать memcached для хранения сеансов.

Это может быть только выигрышный билет для вас.

Посмотрите этот поиск google.

0

Основной причиной хранения данных сеанса в базе данных является безопасность, поскольку в противном случае у вас нет возможности ее проверить. Вы должны сохранить идентификатор сеанса вместе с данными в базе данных и сопоставить их, чтобы увидеть, был ли изменен сеанс, но вы больше не можете использовать механизм сеанса сервера (apache) по умолчанию.

Для хранения переменных в memcache вместо сеанса.. вы настроили кеш-сервер базы данных? Сначала я бы посмотрел туда, потому что с ним гораздо легче справиться, чем с memcache.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню