Мне нужно сохранить множество массивов в $_SESSION
чтобы предотвратить извлечение информации из MySQL. Это нормально? Сколько «слишком много» информации в $_SESSION
или нет «слишком много»? Благодарю.
PS Или лучше использовать http://php.net/manual/en/book.memcache.php ?
Предел данных, который вы можете сохранить внутри сеанса, ограничен уровнем хранения сеанса. Хранилище сеансов по умолчанию представляет собой файловую систему, и один сеанс хранится в один файл. Имя переменной session / array-key сохраняется, а также данные в сериализованной форме . Символ трубы отделяет имена переменных и значения друг от друга.
Если вы храните массивы со строками, то файл будет таким же большим, как длина строк, а также длина ключей и небольшая надбавка для метаданных, а также размер имен переменных.
Размер файла ограничен файловой системой. Например, в EXT3 это 16 гигабайт на файл. Так что это одно «слишком много». Вы не можете хранить больше данных в сеансе, чем позволяет уровень хранения.
Следующий предел, о котором я могу думать, – это память. Поскольку PHP необходимо загрузить данные из файла в память и сохранить его из памяти в файл в конце запроса. Поэтому, если у вас есть ограничение на память в PHP, это фактически ограничит размер вашей сессии. Например, в PHP 5.2 существует стандартный предел памяти 16 МБ, но это может различаться в зависимости от вашей установки.
Использование всей памяти для сеанса не имеет особого смысла.
Рядом с этими жесткими ограничениями могут быть ограничения производительности, связанные с количеством запрошенных запросов, как быстро ваш жесткий диск и т. Д.
Поскольку ваш вопрос довольно короткий, я предполагаю, что до сих пор вы не сталкивались с какими-либо конкретными проблемами, поэтому я думаю, что это будет вне сферы действия. Например, используя memcached, если вы действительно не нуждаетесь, это будет только накладные расходы. А также обсуждать проектные решения (никогда не кэшировать в сеансах), на которые вообще нельзя ответить вообще.
100 или 200 килобайт за сеанс (найдите каталог сеанса в вашей системе и посмотрите, насколько велики файлы) не должны прерывать вашу программу. Как было предложено, вы должны позаботиться о том, чтобы старые файлы сеансов, которые больше не нужны, удаляются автоматически через определенный период времени.
Чтобы узнать больше о настройке сеанса в PHP, см. Раздел «Настройка времени выполнения сеанса» в Руководстве по PHP .
Многое из того, что вы спрашиваете, зависит от количества пользователей, которых вы ожидаете, и от типа используемого вами оборудования. Предполагая, что ваша конфигурация PHP использует хранилище файлов для информации о сеансе (по умолчанию), и у вас много пространства tmp, в сеансе могут храниться довольно большие куски данных.
Лично я хранил около дюжины объектов данных (обычно результаты базы данных, относящиеся к пользователю) в сеансах. Сайт находился в компании Intranet, обслуживающей около десяти тысяч запросов в час. Это было быстро, и нагрузка была низкой. Если бы мне пришлось угадать, каждая сессия была около 100 КБ.
Я бы не рекомендовал хранить гораздо больше, чем мегабайт или два в сеансе. Вам также нужно будет убедиться, что PHP и Apache (IIS, что угодно) убирают за собой тоже. Если вы храните большое количество данных о сеансе, время будет быстро заполняться.
Если вы действительно хотите сделать что-то вроде этого пылающим быстро, и у вас есть деньги, идите на SSD-диск. Это сделает поиск еще быстрее.
Надеюсь это поможет.
Взгляните на это. Каким может быть максимальный размер для $ _SESSION?
$ _SESSION не для кеширования.
Если вам нужно кэшировать материал, используйте APC , Memcached или даже Redis .
Объем данных на вашем сеансе будет влиять на производительность. Если вы собираетесь использовать файлы для сеанса, обратите внимание, что php может попасть в узкое место на диске. Чтение, запись и сериализация этих данных может привести к тяжелым дисковым вводам, что плохо.
Что касается жесткого верхнего предела, я подозреваю, что эти ограничения такие же, как и у вашей файловой системы. Например, если вы сохраняете огромное количество данных для сеанса и заполняете свой диск, вы не сможете писать дополнительные сеансы.
Использование memcached облегчит проблемы с производительностью ввода-вывода на диске, поскольку запись и чтение из memcached происходит намного быстрее. Ваши ограничения будут 1 Мб за сеанс, согласно спецификации memcached. Общее пространство для сеансов будет размером экземпляра memcache, который вы запускаете (продиктованный флагом -m при запуске экземпляра memcache).