Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How do I set expire time for Zend Cache Storage?

I would like to store some XML in a Zend filesystem cache and have it expire after 30 minutes. How does one set the cache duration / expiry? I am using Zend cache as a component and not in the context of a full ZF2 application.

$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.

How do I set an expiration time and then subsequently check if the cache has expired? The above code does not seem to expire the cache after 60 seconds (the .dat file's timestamp does not change)

like image 211
codecowboy Avatar asked Feb 15 '23 09:02

codecowboy


1 Answers

Have you tried to set option ttl in adapter options?

'adapter' => array(
    'name' => 'filesystem',
    'options' => array(
        'cache_dir' => __DIR__.'/cache',
        'ttl' => 3600,
    ),
),

ZF documentation has even nice quick start examples, where TTL is presented.

Update:

I have tested next script, and TTL is working like it should. You have problem elsewhere.

$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'));
}

Output is :

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
like image 183
Glavić Avatar answered Feb 27 '23 15:02

Glavić