glebmachine
(Glebmachine)
November 16, 2009, 12:07pm
#1
Ребята хелпаните, несрабатыват удаление кеша по ключу.
Уже даже удалялку поставил перед проверкой, все равно, кешируется раз в минуту, и держит в кеше, пока не стухнет…
Yii::app()->cache->delete('GroupPanel');
if($this->beginCache('GroupPanel',array(
'duration'=>60
))) {
... Blah blah blah ...
$this->endCache(); }
Yii::endProfile('GroupPanel');
rosko
(A)
November 16, 2009, 1:06pm
#2
Используйте duration
http://www.yiiframework.com/doc/guide/caching.fragment#duration
...other HTML content...
<?php if($this->beginCache('GroupPanel', array('duration'=>60))) { ?>
...content to be cached...
<?php $this->endCache(); } ?>
...other HTML content...
естественно я использую дюрейшн, но задача - долгоиграющее хранение, с сбросом кеша по запросу. Нехочется делать 6 малких sql запросов, ради того чтобы проверить "вдруг чето изменилось", проще при изменении внутренней информации давать команду на флеш кеша
Rsol
(Slava Rudnev)
November 16, 2009, 2:23pm
#4
glebmachine:
естественно я использую дюрейшн, но задача - долгоиграющее хранение, с сбросом кеша по запросу. Нехочется делать 6 малких sql запросов, ради того чтобы проверить "вдруг чето изменилось", проще при изменении внутренней информации давать команду на флеш кеша
Попробуй так:
if($this->beginCache('GroupPanel',array(
'duration'=>60,
'dependency'=>array(
'class'=>'CExpressionDependency',
'expression'=>time(),
),
))) {
... Blah blah blah ...
$this->endCache(); }
Yii::endProfile('GroupPanel');
сам не пробовал, но согласно документации должно работать
только при такой конструкции лучше кеш вообще не ставить
Rsol:
Попробуй так:
if($this->beginCache('GroupPanel',array(
'duration'=>60,
'dependency'=>array(
'class'=>'CExpressionDependency',
'expression'=>time(),
),
))) {
... Blah blah blah ...
$this->endCache(); }
Yii::endProfile('GroupPanel');
сам не пробовал, но согласно документации должно работать
только при такой конструкции лучше кеш вообще не ставить
Так а что тут должно работать )
Мне нужно чтобы: $someclass->delete(Мой ключ);
и фрагмент кеша умирает, но это не срабатывает с фрагментарным кешированием, только с классическим
necros
(Necros Ky)
November 17, 2009, 4:39pm
#6
beginCache->COutputCache:
/**
* Prefix to the keys for storing cached data
*/
const CACHE_KEY_PREFIX='Yii.COutputCache.';
Удаляете не по тому ключу.
Albert
(Testphptest)
November 20, 2009, 4:31pm
#7
Вот как я меню закешировал:
if($this->beginCache('menu', array('duration'=>2000000, 'varyByRoute'=>false))) {
$this->widget('application.components.widgets.menu.menu');
$this->endCache();
}
тут главное ‘varyByRoute’=>false
удаление
Yii::app()->cache->delete('Yii.COutputCache.menu......');
Не спрашивайте откуда столько точек, сами посмотрите метод COutputCache::getCacheKey()
/надо бы это переопределить как-нибудь по-проще