我有以下功能:
function Cache($key, $value = null, $ttl = 60)
{
if (isset($value) === true)
{
apc_store($key, $value, intval($ttl));
}
return apc_fetch($key);
}
我正在使用以下代码对其进行测试:
Cache('ktime', time(), 3); // Store
sleep(1);
var_dump(Cache('ktime') . '-' . time()); echo '<hr />'; // Should Fetch
sleep(5);
var_dump(Cache('ktime') . '-' . time()); echo '<hr />'; // Should NOT Fetch
sleep(1);
var_dump(Cache('ktime') . '-' . time()); echo '<hr />'; // Should NOT Fetch
sleep(1);
var_dump(Cache('ktime') . '-' . time()); echo '<hr />'; // Should NOT Fetch
这是输出:
string(21) "1273966771-1273966772"
string(21) "1273966771-1273966777"
string(21) "1273966771-1273966778"
string(21) "1273966771-1273966779"
不应该是这样的:
string(21) "1273966771-1273966772"
string(11) "-1273966777"
string(11) "-1273966778"
string(11) "-1273966779"
我不明白,任何人都可以帮我弄清楚这种奇怪的行为吗?
答案 0 :(得分:2)
显然这是APC 3.0.16(2007-12-26)及其后的已知问题,不会修复。
http://pecl.php.net/bugs/bug.php?id=13331
ttl有效,但“t”在给定请求期间是常量。因此,缓存对象在至少下一个请求之前不会过期。