2016-06-12 31 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"); 

我下php_cli與apc_store/apcu_store存儲在一個PHP腳本,並在另一個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

回答

2

APC和​​都在它們運行的​​同一進程中共享內存,但不能在不同進程中使用該進程。他們打算使用prefork多進程或多線程應用程序(apache/php-fpm/etc)。

APCu的CLI版本主要是爲了幫助進行測試,但是如果您使用CLI運行代碼,然後運行CLI的另一個實例 - 您將不會獲得第一次運行的數據(同樣會發生如果你將重新啓動你的網絡服務器)。

不幸的是,這些信息在文檔中並不清楚。

+0

感謝您的非常明確的解釋。 – lulyon

相關問題