2016-06-12 6 views
1

У меня возникла проблема с PHP для локального хранения промежуточного результата.PHP apc/apcu cache не сохраняет промежуточный результат, пока shmop делает, почему?

С APC:

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

С APCu:

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

храню с apc_store/apcu_store под php_cli на PHP скрипт, и принести с 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']; 

Здесь я получаю $ret: "bar".

Не следует ли кэшировать промежуточный результат локально, как shmop?

ответ

2

Оба APC и APCu совместно используют память в том же процессе, в котором они запускаются, однако вы не можете использовать это с различными процессами. Они намеревались работать над многопроцессорными или многопоточными приложениями (apache/php-fpm/etc).

CLI-версия APCu в основном помогает в тестировании, но если вы запускаете код с использованием CLI, а затем запускаете другой экземпляр CLI - у вас не будет данных с вашего первого запуска (то же самое произойдет если вы перезапустите веб-сервер).

К сожалению, эта информация не указана в документации.

+0

Спасибо за очень четкое объяснение. – lulyon