2014-06-11 77 views
0

數據未被清除當執行時間大於TTL時,爲什麼key_1未被清除?儘管有apc_add()TTL參數

$ttl = 3; 

$key = 'key_1'; 

if (apc_exists($key)) { 
    echo "Data exists!\n"; 
    if (apc_delete($key)) 
     echo "Data deleted.\n"; 
    else 
     die("Unable to delete data\n"); 
} else { 
    echo "Data not present.\n"; 
} 

apc_add($key, 'some-value', $ttl); 

$start = microtime(true); 

echo "TTL: ".$ttl."sec\n"; 

while (1) { 
    sleep(1); 
    $exec_time = round(microtime(true) - $start, 1); 
    $data = apc_fetch($key); 
    if (!empty($data)) { 
     echo 'key_1: ['.$data.']: ' 
      .$exec_time."sec" 
      .(($exec_time > $ttl) ? "\t<<< Data still exists!\n" : "\n"); 
    } else { 
     die("Data was cleared!\n"); 
    } 

} 
+0

你也可以var_dump「apc_add」的響應嗎? 'key_1'可能已經存在一個更長的TTL? – Scopey

+0

我已編輯腳本以檢查數據是否已經存在,並且它不存在... –

回答

0

我讀了the docs多一點,我找到了答案。在TTL參數部分下:

生存時間;將var存儲在緩存中ttl秒。 ttl通過後,存儲的變量將從緩存中清除(在下一個請求中)。如果沒有提供ttl(或者如果ttl爲0),則該值將一直保持到手動從緩存中移除,否則將無法存在於緩存中(清除,重新啓動等)。

關鍵部分是第一組括號; (在下一個請求中)

+0

嗯,沒有請求,因爲它是cli。查看標籤:) –

+0

類似的交易,據我所知。嘗試運行一個腳本來存儲一個值,然後手動嘗試在3秒鐘之後通過單獨的CLI調用來獲取該值。 – Scopey

+0

嘗試過 - 數據不在進程之間共享 –