2

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

APC:</p>

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

APCu:</p>

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

我在 php 脚本的 php_cli 下使用 apc_store/apcu_store 存储,并在另一个 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吗?

4

1 回答 1

6

APC和APCu在它们运行的​​同一进程共享内存,但是您不能将其用于不同的进程。他们打算在 prefork 多进程或多线程应用程序(apache/php-fpm/etc)上工作。

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

不幸的是,这些信息在文档中并不清楚。

于 2016-06-12T14:08:03.163 回答