Как я могу хранить данные в оперативной памяти с помощью PHP?

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


person Andry R.    schedule 03.11.2010    source источник
comment
возможный дубликат PHP - переменные на стороне сервера, которые будут жить вечно? - там много ответов, применимых к вашему вопросу.   -  person Gordon    schedule 03.11.2010
comment
Почему? В любой современной операционной системе (где хранилище не находится в общей файловой системе) файловые данные все равно кэшируются в памяти.   -  person symcbean    schedule 03.11.2010


Ответы (4)


APC?

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

ИЗМЕНИТЬ Вы уверены, что APC установлен правильно? Вы добавили extension=apc.so в свой php.ini? И перезапустить apache (я предполагаю, что вы на ламповом сервере с apache2)? Что вы phpinfo(); говорите об APC?

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

<?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.

person Strae    schedule 03.11.2010
comment
Он не может установить memcached, поэтому, скорее всего, он не может установить и APC. - person Pekka; 03.11.2010
comment
Верно, но многие хостеры разрешают использование APC (с некоторыми ограничениями) - надо у него спросить. - person Strae; 03.11.2010

Вы всегда можете использовать базу данных в памяти для сохранения данных. Хотя, возможно, перебор.

person Paul Sonier    schedule 03.11.2010
comment
Я удивлен, что никто больше не повысил ваш ответ. Я успешно использовал таблицы памяти mysql, и они очень быстрые. RDB может быть излишним для сеансов, но это отличный вариант, когда у вас нет доступа к memcached или /dev/ - person Jordan Honeycutt; 08.03.2015

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

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

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

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

person Pekka    schedule 03.11.2010

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

person kijin    schedule 03.11.2010
comment
Он вроде на общем сервере - person Pekka; 03.11.2010
comment
@Pekka Ну, тогда он облажался ... Будем надеяться, что его файл будет кэширован ОС. - person kijin; 03.11.2010