PHP apc/apcu 缓存不保留中间结果,而 shmop 保留中间结果,为什么?

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

我在 PHP 本地存储中间结果时遇到了问题。

APC

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

APCu

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

我在 php 脚本中使用 apc_store/apcu_store 存储在 php_cli 下,并在另一个 php 脚本中使用 apc_fetch/apcu_fetch 获取,然后找到 $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 and APCu 在它们 运行 所在的同一进程中共享内存,但是您不能将其用于不同的进程。他们打算在 prefork 多进程或多线程应用程序 (apache/php-fpm/etc) 上工作。

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

很遗憾,该信息在文档中并不清楚。