Не удаляет закешированные файлы

Общие вопросы по использованию второй версии фреймворка. Если не знаете как что-то сделать и это про Yii 2, вам сюда.
Ответить
novi40k
Сообщения: 8
Зарегистрирован: 2018.04.12, 15:46

Не удаляет закешированные файлы

Сообщение novi40k »

Добрый день.

Есть отчёт, который формируется из базы по отчетной дате (DATE_REP). Он довольно большой, поэтому использую кеш.

Код: Выделить всё

$fields = Yii::$app->db->createCommand("select * from TITLES where DATE_REP = ".$_GET['DATE_REP']."");

Yii::$app->cache_report->set('report_'.$_GET['DATE_REP'].'', $fields, 86400, new TagDependency(['tags' => 'report_'.$_GET['DATE_REP'].'']));
Где cache_report - компонент, $_GET['DATE_REP'] - отчётная дата, report_'.$_GET['DATE_REP'].' - ключ кеша вида report_01.12.16, report_'.$_GET['DATE_REP'].' - tag.

Код компонента:

Код: Выделить всё

'cache_report' => [
            'class' => 'yii\caching\FileCache',
			'keyPrefix' => 'report_'.$_GET['DATE_REP'].'?', 
			'cachePath' => '@runtime/cache/report',
        ],
Пользователи запрашивают отчеты на разные даты:

Код: Выделить всё

$keys_only = Array
(
    [0] => 01.06.16
    [1] => 01.07.16
    [2] => 01.12.16
    [3] => 01.04.16
    [4] => 01.08.16
    [5] => 01.09.16
    [6] => 01.10.16
    [7] => 01.05.16
    [8] => 01.02.16
    [9] => 01.01.16
    [10] => 01.03.16
    [11] => 01.11.16
)
Они также могут изменять данные в отчёте за прошлую дату. Например, после изменения отчета за дату 02.05.16, все последующие кеши отчетов становятся неактуальными. Поэтому нужно удалить их кеш.

Код: Выделить всё

for($d = 0; $d < count($keys_only); $d++){
	
	if(\DateTime::createFromFormat("d.m.y", "".$keys_only[$d]."") >= \DateTime::createFromFormat("d.m.y", "".$_GET['DATE_REP']."")){

		echo('<br></br> > '.$keys_only[$d].' больше '.$_GET['DATE_REP'].' report_'.$keys_only[$d].' --> удалить ');
			
		// удаление кеша
		Yii::$app->cache_report->delete('report_'.$keys_only[$d].'');
//		TagDependency::invalidate(Yii::$app->cache_report, 'report_'.$keys_only[$d].'');
			
		// удаление из таблицы
		Yii::$app->DB->createCommand("DELETE FROM YII_CACHE_INFO WHERE KEY = 'report_".$keys_with[$d]['DATE_REP']."'")->execute();	
		
	} else{
		echo('<br></br> < '.$keys_only[$d].' меньше '.$_GET['DATE_REP'].' --> оставить ');
			
	} 
}
На выходе получаем:

Код: Выделить всё

> 01.06.16 больше 02.05.16 report_01.06.16 --> удалить 

 > 01.07.16 больше 02.05.16 report_01.07.16 --> удалить 

 > 01.12.16 больше 02.05.16 report_01.12.16 --> удалить 

 < 01.04.16 меньше 02.05.16 --> оставить 

 > 01.08.16 больше 02.05.16 report_01.08.16 --> удалить 

 > 01.09.16 больше 02.05.16 report_01.09.16 --> удалить 

 > 01.10.16 больше 02.05.16 report_01.10.16 --> удалить 

 < 01.05.16 меньше 02.05.16 --> оставить 

 < 01.02.16 меньше 02.05.16 --> оставить 

 < 01.01.16 меньше 02.05.16 --> оставить 

 < 01.03.16 меньше 02.05.16 --> оставить 

 > 01.11.16 больше 02.05.16 report_01.11.16 --> удалить 
Но Yii::$app->cache_report->delete('report_'.$keys_only[$d].'');
(Yii::$app->cache_report->delete('report_01.06.12') и другие даты) не удаляют кеш. Пробовал через tag - таже ситуация.

P.S. как узнать существующие в кеше ключи (или теги)?
mkramer
Сообщения: 531
Зарегистрирован: 2014.12.14, 13:02

Re: Не удаляет закешированные файлы

Сообщение mkramer »

А что в логах? Может права сбились на папку с кешем
novi40k
Сообщения: 8
Зарегистрирован: 2018.04.12, 15:46

Re: Не удаляет закешированные файлы

Сообщение novi40k »

права на всю папку runtime 777.
В дебаге в логах нет ошибок. Есть запросы к базе, на удаление кеша нет. Где еще посмотреть кроме дебагера?
mkramer
Сообщения: 531
Зарегистрирован: 2014.12.14, 13:02

Re: Не удаляет закешированные файлы

Сообщение mkramer »

Какое приложение, basic или advanced? Протрассируй, посмотри, что происходит.
Ответить