Я столкнулся с проблемой с PHP для локального хранения промежуточного результата.
С APC
:
apc_store("foo", "bar");
$ret = apc_fetch("foo");
С APCu
:
apcu_store("foo", "bar", 0);
$ret = apcu_fetch("foo");
Я сохраняю с помощью apc_store / apcu_store в php_cli для сценария php и извлекаю с помощью apc_fetch / apcu_fetch для другого сценария php и нахожу $ret
быть пустым.
Пока с shmop
:
$shmKey = ftok(__FILE__, 't');
$shmId = shmop_open($shmKey, "c", 0644, 1024);
$dataArray = array("foo" => "bar");
shmop_write($shmId, serialize($dataArray), 0);
$retArray = unserialize(shmop_read($shmId, 0, shmop_size($shmId)));
$ret = $retArray['foo'];
Здесь я получаю $ret
: "bar"
,
Не должен APC/APCu
кешировать промежуточный результат локально так же, как shmop
?
И то и другое APC а также APCu распределяйте память между теми же процессами, в которых они запущены, но вы не можете использовать их с разными процессами. Они предназначались для работы в многопроцессорных или многопоточных приложениях prefork (apache / php-fpm / etc).
CLI-версия APCu предназначена главным образом для помощи в тестировании, но если вы запустите код, используя CLI, а затем запустите другой экземпляр CLI — у вас не будет данных при первом запуске (то же самое произойдет, если вы перезапустите ваш веб-сервер).
К сожалению, эта информация не ясна в документации.
Других решений пока нет …