Как сохранить структуру данных в памяти для использования несколькими пользователями, несколько запросов страниц в PHP - PullRequest
2 голосов
/ 11 мая 2011

Я новичок в PHP, и мне не повезло, что я ищу подходящую практику для этого сценария.

У меня есть структура данных, которую дорого создавать, она применима ко всем пользователям сайта,является идентичным для всех пользователей сайта и никогда не изменяется после создания.(ОК - это нужно менять всякий раз, когда я загружаю новые версии файлов исходного кода.) Он не особенно велик.В идеале, Я хотел бы создать его один раз - в первый раз, когда мне это нужно - и удерживать его после этого , используя один и тот же экземпляр для каждого пользователя, каждый запрос страницы,Тогда было бы хорошо, если бы я получал «обнуление» всякий раз, когда я нажимаю «очистить кешированные данные» (я использую Drupal).

Я не нашел учебник о том, как это сделать ...Я вижу, как я могу хранить информацию в сеансе, но это относится только к одному пользователю.

ОБНОВЛЕНИЕ

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

Ответы [ 3 ]

5 голосов
/ 11 мая 2011

Звучит то, что вы ищете, это какой-то кешированный объект.

Существует несколько различных методов кэширования, которые вы можете использовать в PHP:

  • В файле в файловой системе
  • Использование APC, который находится в локальной кэш-памяти
  • memcached, который находится в кеше памяти, доступ к которому осуществляется через TCP / IP

Для каждого из них вы, вероятно, захотите сериализовать свою структуру данных (с PHP serialize()), сохранить ее в хранилище кеша, а затем прочитать ее обратно и десериализовать данные (с unserialize()).

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

0 голосов
/ 11 мая 2011

Вы просматривали переменные Drupal?

http://drupal.org/project/drupal_variables

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

0 голосов
/ 11 мая 2011

PHP не выполняет кэширование между сессиями. Вы захотите использовать одно из расширений, которое PHP должен использовать для кэширования. Некоторые опции включают APC или Memcache . С помощью любого из них вы можете создать свои данные, сериализовать их, а затем установить / получить данные из кэша.

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