PHP - Как поделиться данными конфигурации между сессиями - PullRequest
1 голос
/ 04 июля 2011

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

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

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

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

Ответы [ 4 ]

3 голосов
/ 04 июля 2011

Когда мне нужно хранить небольшие биты данных в скриптах, я обычно использую apc

apc_add('config', array('a' => 'b'));

$config = apc_fetch('config');
1 голос
/ 04 июля 2011

... среди сеансов

скорее подразумевает, что вы уже используете сеансы - так почему бы просто не использовать пользовательский обработчик сеансов?

Вы загружаете данные сеанса, используя идентификатор сеанса, и перегружаете конфигурацию. При желании вы можете настроить его так, чтобы вы могли вызывать метод read и возвращать только данные конфигурации без поиска обычных данных сеанса.

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

0 голосов
/ 04 июля 2011

Ответ memcached: http://memcached.org/

Это своего рода вещь, предназначенная для такого рода сценариев, и есть много хороших учебников, но официальная документация php является хорошей отправной точкой: http://php.net/manual/en/book.memcache.php

0 голосов
/ 04 июля 2011

Вы можете сохранить это как: -

$_SESSION['_config_data']['index_1'] = 'value_1';
$_SESSION['_config_data']['index_2'] = 'value_2';
$_SESSION['_config_data']['index_3'] = 'value_3';
...

Таким образом, вы получите все данные конфигурации, хранящиеся в переменной сеанса "$_SESSION['_config_data']".

Но вам нужнопроверить при запуске метода установки, существует ли переменная сеанса "$_SESSION['_config_data']" с некоторыми предварительно заполненными данными или нет.Если это так, то вам не нужно устанавливать данные конфигурации для каждого запроса страницы.

Надеюсь, это поможет.

...