phpcachingapcapcu

PHP apc/apcu cache do not keep intermediate result while shmop do, why?


I've encounter a problem with PHP to store intermediate result locally.

With APC

apc_store("foo", "bar");
$ret = apc_fetch("foo");

With APCu

apcu_store("foo", "bar", 0);
$ret = apcu_fetch("foo");

I store with apc_store/apcu_store under php_cli on a php script, and fetch with apc_fetch/apcu_fetch on another php script, and find the $ret to be empty.

While, with 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'];

Here I get the $ret: "bar".

Shouldn't the APC/APCu cache the intermediate result locally just as the shmop?


Solution

  • Both APC and APCu share the memory across the same process they run in however you cannot use that with different processes. They intended to work on a prefork multiprocess or multithreaded applications (apache/php-fpm/etc).

    The CLI version of APCu is there mostly to help with testing, but if you run a code using the CLI and then run another instance of the CLI - you will not have the data from your first run (the same will happen if you will restart your web server).

    It's unfortunate that this information is not clear in the documentation.