Срок действия записей кэша пользователя 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;

Не следует ли очистить кешированную запись из кеша и вернуть apc_fetch() значение false? Параметр 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 с помощью модульного теста. - person Jason McCarrell; 20.02.2013
comment
Я только что провел дополнительные тесты, и весь кеш очищается и поддерживается ПОСЛЕ операции чтения или записи. Таким образом, если вы записываете в кеш с ttl 1, ждете 2 секунды, затем читаете с того же ключа кеша, то он все еще будет существовать, а затем будет стерт после чтения. Если вы записываете с ttl 1, ждете 2 секунды, затем читаете с другого ключа кэша, а затем пытаетесь прочитать с ttl 1 ключа, он будет стерт. По сути, кеш очищает ключи с истекшим сроком действия TTL после любого вызова кеша. Из-за таких сложностей я не беспокоюсь о производительности, пока не появятся узкие места. - person Jason McCarrell; 20.02.2013