progress_man
@progress_man
php – it's my life

Почему Yii2 не находит кеш?

Имеется приложение. В определенные моменты, создается кеш некоторой выборки из БД:
public static function getAllHosts($by = 'id')
{
	$_cache = Yii::$app->cache;		
	$key_cache_list_hosts = 'list_hosts_array_' . $by;
	$dependency = new \yii\caching\DbDependency(['sql' => 'SELECT COUNT(*) FROM {{%hosts}}']);
	
	$_hosts = $_cache->get($key_cache_list_hosts);
	
	if ($_hosts === false) {
		try {
			$_hosts = static::find()->asArray()->indexBy($by)->all();
		} catch (\Exception $e) {
			echo "\n\nFatal error in function <Hosts/getAllHosts>!\n{$e->getMessage()}\nEnd...\n";
			exit;
		}
		
		$_cache->set($key_cache_list_hosts, $_hosts, 3600 * 12, $dependency);
	}
	
	return $_hosts;
}

Также имеется код отвечающий за удаление этого кеша:
public static function deleteAllKeyHosts()
{
	$_cache = Yii::$app->cache;
	$key_cache = [];
	$pref = 'list_hosts_array_';
	
	$key_cache[] = $pref . 'id';
	$key_cache[] = $pref . 'name';
	$key_cache[] = $pref . 'comment';
	
	foreach ($key_cache as $_key) {
		$_cache->delete($_key);
	}
}


Теперь о главном. Во время работы приложения, если создать упомянутый кеш и тут же вызвать функцию удаления, то все работает без нареканий. А вот если кеш был создан во время одного запроса к приложению, а потом другой запрос обращается к приложению с просьбой удаления данного кеша, то Yii2 данные ключи не находит, хотя они есть в папке @app/runtime/cache. Вопрос: как такое может быть?
  • Вопрос задан
  • 360 просмотров
Решения вопроса 1
progress_man
@progress_man Автор вопроса
php – it's my life
Вопрос закрыт! После долгого изучения проблемы выяснил, что косяк мой – в приложении был модуль, который использовал отдельный config, а в нем id приложения отличалось от "основного"...
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
webinar
@webinar Куратор тега Yii
Учим yii: https://youtu.be/-WRMlGHLgRg
Исходя из Вашего кода это вполне возможно
Вы удаляете кеш с тремя ключами, одного из них может не быть. Добавьте проверку на существование перед удалением.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы