Обновление кэша записей (cache_db) при расширении собственного класса

Была у меня задача (может, кому-то поможет по признакам схожести): расширить стандартный класс xPDOSimpleObject шаблоном, который потом нужно расширить другими классами. Естественно, с панелью в админке в виде грида (Ext JS Grid). Так вот столкнулся с тем, что когда активен кэш БД (cache_bd), при создании или удалении дочерних классов (в которых не прописаны таблицы БД — object class=«myChildClass» extends=«myClass») от моего шаблонно-родительского (в котором указана таблица БД — object class=«myClass» table=«my_records» extends=«xPDOSimpleObject»), ничего в таблице не меняется, пока не скинуть системный кэш. Ковыряя несколько дней тему кэширования пришел, на мой взгляд, к весьма простому способу это дело поправить.

Так как все это происходит через процессоры, туда нам и нужно. Нужно поправить, собственно, два процессора — создания и удаления (например, create.class.php и remove.class.php для тех, кто использует modExtra, например, от Василия), а точнее, добавить очистку кэша БД для данного модуля (данной модели), или вообще очистку для кэша БД:

Процессор создания (create.class.php), добавляем два метода:
public function cleanup()
{
	$this->clearCache();

	return parent::cleanup();
}

public function clearCache()
{
	$this->modx->cacheManager->refresh([
		'db' => [
			'objects' => 'myClass' // Это можно не указывать, тогда почистим весь кэш БД
		],
	]);

	return true;
}
,

процессор удаления (remove.class.php), добавляем один метод и поправляем метод process():
public function process()
{
	...

	$this->clearCache();

	return $this->success();	
}

public function clearCache()
{
	$this->modx->cacheManager->refresh([
		'db' => [
			'objects' => 'myClass'
		],
	]);

	return true;
}

Всем хороших выходных ;)
Виктор Долгий
30 марта 2018, 16:15
modx.pro
1
1 957
+1

Комментарии: 3

Pavel Zarubin
30 марта 2018, 20:03
0
Насколько вообще целесообразно включать кэширование бд? Проверял на нескольких проектах — прирост скорости просто отсутствует же
    Виктор Долгий
    30 марта 2018, 21:35
    0
    Да все зависит и от хостинга и от задачи, думаю. Я не проводил тестов на эту тему, но в моем случае — доска объявлений, база для хранения админ. единиц страны, в базе будет около 22 000 населённых пунктов и прочих единиц, много запросов разнобойных по разным админ единицам, может помочь. Наверное :)
      Виктор Долгий
      30 марта 2018, 22:11
      +1
      Наверное — это при том условии, что я не ресурс расширяю и своего кэш-менеджера, как у ресурсов не делал, не много полей и немного данных, но все таки без него как-то будет не так, думаю. Почему я так думаю — cache_db создает не только файл кэша с массивом элементов таблицы, но и создает кэш-файлы для каждого значения, почти так же, как сам MODx создает свой кэш для ресурсов. Это из наблюдений и поверхностного анализа XPDO кэша, модкэшменеджера и работы кэширования процессорами ресурсов. Но я не претендую на знатока вопроса.
    Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
    3