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

APCAPCuはどちらも、それらが実行される同じプロセスでメモリを共有しますが、異なるプロセスで使用することはできません。彼らは、プレフォークのマルチプロセスまたはマルチスレッド アプリケーション (apache/php-fpm/etc) で動作することを意図していました。

APCu の CLI バージョンは主にテストを支援するためにありますが、CLI を使用してコードを実行してから CLI の別のインスタンスを実行すると、最初の実行からのデータが得られません (再起動しても同じことが起こります)。あなたのウェブサーバー)。

この情報がドキュメントで明確でないことは残念です。

于 2016-06-12T14:08:03.163 に答える