Search code examples
phpcachingzend-frameworkrediszend-framework2

ZF2 Redis: how to set expiration time for a key


I have to set up a Redis on a server to store information from Zend Framework 2. For now, I can store information, but I can not to give them an expiration time for they naturally renew themselves after a while.

I have not found some documentations about this step and it seems to me rather obscure.

My code:

page: config/autoload/cache.global.php

return array(
    'caches' => array(
        'redis' => array (
            'adapter' => array (
                'name' => 'redis',
                'lifetime' => 60, //doesn't work
                'options' => array (
                    'server' => array (
                        'host' => 'x.x.x.x',
                        'port' => x
                    ),
                    'ttl' => 10, // seems to have no effect
                    'namespace' => 'mycache',
                ),
            ),
        )
    )
);

in Controller :

..
use Zend\Cache\StorageFactory;
..
        $redis = StorageFactory::factory ($this->getServiceLocator ()
             ->get ('config')['caches']['redis']);

        if ($redis->hasItem ('test')) {
                var_dump($redis->getItem ('test'));
                $redis->removeItem('test');
        } else {
            $redis->addItem('test', 'testtest');
        }
..

I tried several methods, but everytime, the result is the same, no expiration information appears in Redis :

127.0.0.1:6379> get mycache:test
"testtest"
127.0.0.1:6379> ttl mycache:test
(integer) -1

Thanks for your help!


Solution

  • You can also try this:

    $redis = $this->getServiceLocator()->get('Cache\RedisFactory');
    $redis->getOptions()->setTtl(10);
    $redis->setItem('test', 'Custom Value');
    

    So there is no need to set it globaly in factory. This work for me :)