PHP apc / apcu缓存不能保持中间结果,而shmop可以,为什么?

lul*_*yon 2 php caching apc apcu

我在使用PHP将本地结果存储在本地时遇到问题。

APC

apc_store("foo", "bar");
$ret = apc_fetch("foo");
Run Code Online (Sandbox Code Playgroud)

APCu

apcu_store("foo", "bar", 0);
$ret = apcu_fetch("foo");
Run Code Online (Sandbox Code Playgroud)

我将apc_store / apcu_store与apc_store / apcu_store存储在一个php脚本的php_cli下,并与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'];
Run Code Online (Sandbox Code Playgroud)

在这里,我得到$ret"bar"

APC/APCu中间结果是否应该像本地缓存一样shmop

Dek*_*kel 5

无论APCAPCu份额跨越他们,但是你不能使用,不同的进程中运行同一进程的内存。他们打算在prefork多进程或多线程应用程序(apache / php-fpm / etc)上工作。

APCu的CLI版本主要是用来帮助测试的,但是如果您使用CLI运行代码然后运行CLI的另一个实例-您将没有第一次运行的数据(如果重新启动,则会发生同样的情况)您的网络服务器)。

不幸的是,该信息在文档中不清楚。