2016-06-12 30 views
1

Ich habe ein Problem mit PHP, um Zwischenergebnisse lokal zu speichern.PHP apc/apcu Cache nicht Zwischenergebnis halten, während Shmop tun, warum?

Mit APC:

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

Mit APCu:

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

Ich speichere mit apc_store/apcu_store unter php_cli auf einem PHP-Skript, und hole mit apc_fetch/apcu_fetch auf einem anderen PHP-Skript, und finde die $ret leer sein.

Während bei 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']; 

Hier bekomme ich die $ret: "bar".

Sollte nicht das APC/APCu das Zwischenergebnis lokal zwischenspeichern, so wie das shmop?

Antwort

2

Sowohl APC als auch APCu teilen den Speicher über den gleichen Prozess, in dem sie ausgeführt werden, jedoch nicht mit anderen Prozessen. Sie beabsichtigten, an einem Prefork-Multiprozess oder Multithread-Anwendungen (apache/php-fpm/etc) zu arbeiten.

Die CLI-Version von APCu dient hauptsächlich zum Testen, aber wenn Sie einen Code mit der CLI ausführen und dann eine andere Instanz der CLI ausführen, haben Sie beim ersten Lauf keine Daten mehr (das gleiche passiert) wenn Sie Ihren Webserver neu starten).

Es ist bedauerlich, dass diese Informationen in der Dokumentation nicht klar sind.

+0

Danke für die sehr klare Erklärung. – lulyon