2017-02-20 61 views
0

Мой сайт (обслуживаемый PHP) использует некоторые значения, которые дорого рассчитать (и расчет детерминирован), поэтому я хотел бы кэшировать результат по первому запросу. Тогда я мог бы использовать эту функцию:Есть ли статическая переменная на уровне сервера в PHP?

function MyValue($valueID) { 
    if (!isset($myValueCache[$valueID])) { 
    $myValueCache[$valueID] = ... // The long and expensive calculation. 
    } 
    return $myValueCache[$valueID]; 
} 

Вопрос в том, как объявить $myValueCache сохранить свое значение между различными вызовами сценария? Я бы назвал его «статической переменной на уровне сервера» или что-то в этом роде. Простая переменная static не является желательным решением. http://www.elated.com/articles/php-variable-scope-all-you-need-to-know/ пишет: «Как только скрипт завершается, статическая переменная будет уничтожена, как это делают локальные и глобальные переменные». Я хотел бы сохранить значение, пока я не укажу unset. Спасибо :)

PS. Например, «дорогой» означает доступ к базе данных. Вычисление и жесткое кодирование результата невозможно во время разработки.

+1

Если пользователь задает вопрос, запишите его в сеанс, если не сохранить его в поле БД, поскольку у вас уже есть БД. Не дорого «SELECT value FROM cache WHERE id = $ valueID' – AbraCadaver

+0

Ну, после долгого молчания, я думаю, что окончательный ответ:« В PHP нет такого объявления переменных ». (Но я не уверен, именно поэтому я спросил его.) Спасибо за рекомендуемые обходные пути. База данных в памяти с объяснением @ AbraCadaver может быть решением. –

ответ

2

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

+0

Спасибо, но СУБД не мой выбор, и это обходное решение на самом деле не является ответом на вопрос. Мы не можем переместить полную базу данных в память только для этой проблемы. –

+1

Вы сохраняете эту переменную в кеше памяти, а не в базе данных. – AbraCadaver

+0

Поверьте мне, для кеширования вы не можете найти ничего лучше, чем в памяти. Это называется только база данных, потому что она похожа на нее, но на самом деле она не имеет ничего общего с классической СУБД. –

 Смежные вопросы

  • Нет связанных вопросов^_^