Как я могу хранить данные в оперативной памяти, используя PHP? - PullRequest
9 голосов
/ 03 ноября 2010

Есть ли способ хранения небольших данных в оперативной памяти с использованием PHP, чтобы у меня был доступ к данным между различными сеансами вместо их регенерации. Нечто похожее на memcached (у меня нет доступа к memcahced). Мое текущее решение - просто сохранить данные в файл.

Ответы [ 4 ]

12 голосов
/ 03 ноября 2010

APC

Работает отлично от memcached; в memcached вы можете получить доступ к данным на разных языках (c, python и т. д.), в то время как APC работает только для PHP.

РЕДАКТИРОВАТЬ Вы уверены, что APC установлен правильно? Вы добавили extension=apc.so в свой php.ini? И перезапустить Apache (я предполагаю, что вы находитесь на сервере лампы с Apache2)? Что вы phpinfo(); говорите о БТР?

Это просто тест, который идеально подходит для меня:

<?php
/*
 * page.php
 * Store the variable for 30 seconds,
 * see http://it.php.net/manual/en/function.apc-add.php
 * */
if(apc_add('foo', 'bar', 30)){
    header('Location: page2.php');
}else{
    die("Cant add foo to apc!");
}

<?php
/*
 * page2.php
 * */
echo 'foo is been set as: ' . apc_fetch('foo');

p.s: я предпочитаю использовать apc_add вместо apc_store, но единственное различие между ними заключается в том, что apc_add не перезаписывает переменную, а завершится ошибкой, если ее дважды вызвать одним и тем же ключом:

Сохранить переменную под этим именем. ключи уникальны для кэша, поэтому попытка использовать apc_add () для хранения данных с ключом, который уже существует, не перезапишет существующие данные, а вместо этого вернет FALSE. (Это единственная разница между apc_add () и apc_store ().)

Это вопрос вкуса / задачи сценария, но приведенный выше пример работает и с apc_store.

5 голосов
/ 03 ноября 2010

Вы всегда можете использовать БД в памяти для сохранения данных. Возможно, излишне.

4 голосов
/ 03 ноября 2010

Я предполагаю, что вы находитесь на каком-то общем сервере.

memcached или другое решение для кэширования - действительно единственный способ сделать это.

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

Насколько я вижу, без изменения вашей системы на корневом уровне (например, для установки memcached или хранения файлов сеанса).на диске RAM), это невозможно.

3 голосов
/ 03 ноября 2010

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

...