Вы спрашиваете о разных вещах.
Сессия
Сессии в PHP быстрые и эффективные. Тысячи небольших дисковых сессий на умеренно обновленном сервере не станут узким местом для производительности. Ни один из них не пишет свои собственные обработчики (очень легко; в руководстве по PHP есть примеры), чтобы поместить его в базу данных.
О правилах сессий, которые рекомендуются наилучшим образом: только дать веб-браузеру одну вещь - идентификатор сессии. Размещение только зарегистрированного идентификатора пользователя в сеансе и извлечение этих данных из БД, когда они вам нужны, также является наилучшей практикой. Это также означает, что пользовательская информация может быть изменена, и они получат ее при обновлении следующей страницы.
Не похоже, что у вас возникнет эта проблема, но остерегайтесь просто бросать много вещей в сессию. Несколько K данных (скажем, несколько десятков скаляров) в порядке. Подбрасывание множества объектов и больших массивов данных там будет замечено. Если вы делаете это для конкретной страницы, не забудьте выбросить ее в сеансе, как только страница будет завершена.
Возможно, вы также захотите внедрить свой собственный тайм-аут входа в систему с помощью переменной сеанса. Параметры сборки мусора в php.ini
предназначены для управления хранением данных сеанса, а не для тайм-аутов входа в систему.
Кэширование
Это сложная тема, и вам, вероятно, нужно начать собирать показатели (обычно время загрузки страницы), прежде чем что-либо реализовывать.
Для реализации любого вида кэширования вам необходимо учитывать время жизни данных, которые вы кэшируете, и то, насколько дорогостоящей будет их повторная генерация при потере кэша. Просто бросить memcache на проблему - это , а не решение; вам все еще нужно понимать параметры кэширования и то, как memcache их интерпретирует. Это также относится к любому решению для постоянного хранения, в том числе к дисковым сеансам, но я выделяю memcache, потому что он высококлассный и имеет довольно агрессивный механизм истечения срока действия.
Часто пропускаемый пример загружает одни и те же данные из базы данных несколько раз на странице: хороший ORM сделает это за вас, не полагаясь на кэширование запросов MySQL. Еще один пример, о котором забывают, это небольшие запросы, которые выполняются на каждой странице: кэшируйте их всего на несколько секунд на умеренно загруженном сервере, и загрузка базы данных значительно упадет.
Наконец, кэширование на нескольких уровнях часто намного эффективнее и масштабируемо, чем один раз, потому что они могут использовать истечения времени друг друга. Он также хорошо абстрагируется: например, спрятать его в ORM, и он теоретически доступен незаметно и автоматически для всех ваших объектов.