Я хотел бы сохранить некоторый XML в кеше файловой системы Zend и истечь через 30 минут. Как установить длительность / срок действия кеша? Я использую кэш Zend как компонент, а не в контексте полного приложения ZF2.
$cache = \Zend\Cache\StorageFactory::factory(array( 'adapter' => array( 'name' => 'filesystem', 'ttl' => 60, // kept short during testing 'options' => array('cache_dir' => __DIR__.'/cache'), ), 'plugins' => array( // Don't throw exceptions on cache errors 'exception_handler' => array( 'throw_exceptions' => false ), ) )); $key = 'spektrix-events'; $events = new SimpleXMLELement($cache->getItem($key, $success)); if (!$success) { $response = $client->setMethod('GET')->send(); $events = new SimpleXMLElement($response->getContent()); $cache->setItem('spektrix-events', $events->asXML()); } var_dump($cache->getMetadata($key)); // the mtime on the file stays the same as does timestamp from ls -al in a terminal.
Как установить время истечения срока действия, а затем проверить, истек ли кеш? Вышеприведенный код не истекает через 60 секунд (временная метка файла .dat не изменяется)
Вы пытались установить опцию ttl
в вариантах адаптера?
'adapter' => array( 'name' => 'filesystem', 'options' => array( 'cache_dir' => __DIR__.'/cache', 'ttl' => 3600, ), ),
В документации ZF есть даже хорошие примеры быстрого запуска, где представлен TTL.
Я тестировал следующий скрипт, и TTL работает так, как должно. У вас проблемы в другом месте.
$cache = Zend\Cache\StorageFactory::factory(array( 'adapter' => array( 'name' => 'filesystem', 'options' => array('ttl' => 5), ), )); $cache->setItem('a', 'b'); for ($i = 1; $i <= 7; $i++) { sleep(1); echo "var_dump on {$i}th second ... "; var_dump($cache->getItem('a')); }
Выход:
var_dump on 1th second ... string(1) "b" var_dump on 2th second ... string(1) "b" var_dump on 3th second ... string(1) "b" var_dump on 4th second ... string(1) "b" var_dump on 5th second ... NULL var_dump on 6th second ... NULL var_dump on 7th second ... NULL