Записите в потребителския кеш на APC не изтичат

Виждам изход 5 всеки път, когато стартирам този код:

<?php
$v = 5;
apc_store('vwxyz',$v,3);
$before = apc_fetch('vwxyz');
sleep(5);
$after = apc_fetch('vwxyz'); //should be false
echo $before;
echo "<br>";
echo $after;
$later = apc_fetch('vwxyz'); //OK this should definitely be false
echo "<br>";
echo $later;

Не трябва ли кешираният запис да бъде изчистен от кеша и да върне false на apc_fetch()? Настройката user_ttl е 2 за APC. Все още се опитвам да разбера какво прави user_ttl (документацията е доста загадъчна).


person tinkerr    schedule 31.07.2012    source източник


Отговори (1)


От ръководството:

Време за живот; съхранява var в кеша за ttl секунди. След като ttl премине, съхранената променлива ще бъде изтрита от кеша (при следващата заявка). Ако не е предоставен ttl (или ако ttl е 0), стойността ще се запази, докато не бъде премахната от кеша ръчно или по друг начин не съществува в кеша (изчистване, рестартиране и т.н.).

Така се казва, че елементът се премахва от кеша след TTL при следващата заявка. Така че елементът не се премахва от кеша до следващата ви заявка, поради което продължавате да получавате 5.

person drew010    schedule 31.07.2012
comment
Благодаря нарисува. Какво означава следваща заявка? Не $later = apc_fetch('vwxyz'); да се счита за следваща заявка? - person tinkerr; 01.08.2012
comment
@tinkerr Заявка за следваща страница, която предполагам, което означава презареждане на страницата. - person John V.; 01.08.2012
comment
@tinkerr Да, под следваща заявка вярвам, че имат предвид следващата заявка за страница към PHP. Можете да тествате това, като извлечете стойност, отпечатате резултата, съхраните нещо в този ключ и оставите заявката да приключи. Изчакайте 1 секунда и обновете страницата (все още трябва да е зададена). След това изчакайте 5+ секунди, опреснете страницата (стойността трябва да е изчезнала). - person drew010; 01.08.2012
comment
Попаднах също на този проблем, прочетете ръководството, за да означава заявка за apc, а не заявка за страница, което прави моя модулен тест невалиден. уф - person Martin Lyne; 13.11.2012
comment
Същото, моят модулен тест се провали и не можах да разбера защо. Гадно е, че не мога да тествам ttl с помощта на unit test. - person Jason McCarrell; 20.02.2013
comment
Току-що проведох допълнителни тестове и целият кеш се почиства и поддържа СЛЕД операция за четене или запис. Така че, ако пишете в кеша с ttl 1, изчакайте 2 секунди, след това прочетете от същия кеш ключ, тогава той все още ще съществува и след това ще бъде изтрит след четене. Ако пишете с ttl 1, изчакайте 2 секунди, след това прочетете от различен кеш ключ, след това опитайте да прочетете от ttl 1 ключ, той ще бъде изтрит. По същество кешът почиства изтеклите TTL ключове след всяко кеш извикване. Тези видове усложнения са причината да не се тревожа за производителността, докато не се появят тесни места. - person Jason McCarrell; 20.02.2013