Что является хорошим способом достижения постоянства объекта в php - PullRequest
1 голос
/ 27 марта 2012

Здравствуйте, ребята, я пытаюсь получить глобальный / постоянный объект на нескольких страницах php, поэтому мне не нужно загружать его каждый раз.

Я много читаю, но в данный момент я не совсем уверен, что сейчас является лучшим способом достичь этого, когда объект немного больше, например, с помощью. десять многомерных массивов с каждыми 100 или более переменными.

  1. Самый простой способ, я думаю, это использовать сеанс, сериализовать и десериализовать его. Но как насчет производительности?

  2. Сохранение объекта в базе данных и отправка запроса для получения его значений. Может быть, быстрее, чем сессия, но в обработке не так удобно?

  3. Сохраните объект в memcached, но это будет хорошим решением, если мне его хватит. У меня проблема с этим. Что здесь достаточного значения? В документации не было никакой полезной информации об этом. Мой управляемый сервер имеет 8 ГБ памяти ...

  4. Храните объект на жестком диске. Может быть, самый медленный путь?

5. Еще один метод?

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

Спасибо Рувен

Ответы [ 4 ]

0 голосов
/ 27 марта 2012

В зависимости от продолжительности жизни объекта я бы выбрал Memcached или Redis.

Memcached, если объект может жить несколько минут или час, и если его можно безопасно удалить из кэша и восстановить в вашем коде, поскольку объекты в memcached имеют срок действия и могут быть перезаписаны в любое время, если его нет достаточно памяти.

Redis, который похож на memcache, но с большим количеством типов данных и постоянным слоем, если вам нужно, чтобы ваши объекты жили дольше. Ваши объекты будут в основном храниться в памяти, но при необходимости сериализуются на жесткий диск. Истечение срока действия предмета существует, но не является обязательным. Подробнее см. http://redis.io/.

0 голосов
/ 27 марта 2012

На самом деле http-сессии по умолчанию записывают данные сессий в файловую систему, поэтому я удалю вариант 4, так как вариант 1 должен быть равным с точки зрения производительности и прост в управлении.

Я предлагаю использовать memcache в качестве хранилищ памяти.Данные в основном в оперативной памяти.Под memchached постоянный слой может быть установлен как база данных.Таким образом, даже если вы закончите доступную память memchached, вы не потеряете данные.

0 голосов
/ 27 марта 2012

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

Неоптимальный, и я думаю, что это даже не самый простой способ.Я думаю, что использование APC значительно повысит производительность, а использование apc_store ($ name, $ var) не намного сложнее, чем поместить что-либо в сеанс.

0 голосов
/ 27 марта 2012

@ Ruven:

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

Вы можете использовать ваш сеанс, как вы сказали, и установить обработчик сеанса в memcache.Затем все данные сеанса автоматически сохраняются в memcache.

Второй способ - создать таблицу «MEMORY» в вашей базе данных и сохранить данные в этой таблице.Затем сеансы сохраняются в ОЗУ, но если вы перезапустите сервер, данные из таблицы MEMORY будут потеряны.

Самый простой способ - установить memcache в качестве обработчика сеанса, но меня интересуют другие идеи.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...