1

我有以下功能:

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"

我不明白,谁能帮我弄清楚这种奇怪的行为?

4

1 回答 1

2

显然这是 APC 3.0.16 (2007-12-26) 及更高版本中的一个已知问题,不会得到修复。

http://pecl.php.net/bugs/bug.php?id=13331

ttl 有效,但“t”在给定请求期间是一个常数。因此,缓存对象至少在下一个请求之前不会过期。

于 2010-05-16T00:47:20.777 回答