I am using phalcon 2.0.10 instead of 1.3.4. And I've found cache frontend lifetime not working when I used Cache. The cache would expire 3600 sec all the same. And it did not appear in 1.3.4.
|
Oct '16 |
7 |
498 |
0 |
$frontCache = new \Phalcon\Cache\Frontend\Data([
'lifetime' => 300
]);
//backend
$cache = new \Phalcon\Cache\Backend\Libmemcached($frontCache, [
'servers' => [[
'host' => '127.0.0.1',
'port' => '11211'
]],
'statsKey' => null
]);
$di->set('modelsCache', $cache, true);
//use cache when query
$ret = Model::find([
'cache' => [
'key' => 'foo',
'service' => 'modelsCache'
]
]);
Normally, the it will cache 300 sec. But actually, it's 3600 sec.
BackendCache in Phalcon internaly uses _lastLifetime attibute where it stores last lifetime set in start method
https://github.com/phalcon/cphalcon/blob/master/phalcon/cache/backend/libmemcached.zep#L205 https://github.com/phalcon/cphalcon/blob/master/phalcon/cache/backend.zep#L97
I just want to set a public lifetime by this way. And I think the problem is caused by https://github.com/phalcon/cphalcon/blob/master/phalcon/mvc/model/query.zep#L3268
And compare with this https://github.com/phalcon/cphalcon/blob/1.3.4/ext/mvc/model/query.c#L4775
You will know what I want.
Yeah, you are right, problem is in file
https://github.com/phalcon/cphalcon/blob/master/phalcon/mvc/model/query.zep#L3268
You have to submit an issue on github to fix it.
I hit the wall with this issue as well today.
The thing is,
\Phalcon\Cache\Frontend\Data
just does not respect your TTL or Lifetime flags.
If you dive into Zep code here: https://github.com/phalcon/cphalcon/blob/master/phalcon/cache/frontend/data.zep#L63 It's is clear that this class is half implemented.
Update - it seems that it does respect lifetime afterall! If I set it to 10 sec, it will expire and whoo-hoo re-read data again.
But if I put lifetime = 86400
(1 day) it will not refresh it.
I'm still digging into it to be really sure whenever this is a bug or just some gremlin from my code base / use case scenario.