APC не работает, как ожидалось? - PullRequest
1 голос
/ 16 мая 2010

У меня есть следующая функция:

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"

Не понимаю, может кто-нибудь помочь мне разобраться в этом странном поведении?

1 Ответ

2 голосов
/ 16 мая 2010

По-видимому, это известная проблема в APC 3.0.16 (2007-12-26) и более поздних версиях, которая не будет исправлена.

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

ttl работает, но "t" является константой во время данного запроса. Таким образом, кэшированный объект не истекает, по крайней мере, до следующего запроса.

...