Выдано 129077 лицензий

Работа с кэшем в собственных модулях

Работа с кэшем производится с учетом имени кэша, которое задается в конфигурационном файле, и ключом кэша (уникальная строка, идентифицирующая сохраненные в кэше данные).

Чтение из кэша

В случае, если вы работаете с собственным контроллером, получения ключа производится через $cacheKey = strval($this);, которая строится на основании опций контроллера и внешних сигнатур, добавленных через addCacheSignature().

// Имя кэша, задается в конфигурационном файле
$cacheName = 'mycache';

$cacheKey = 'уникальный-ключ';

// Чтение кэша
if (Core::moduleIsActive('cache'))
{
	$oCore_Cache = Core_Cache::instance(Core::$mainConfig['defaultCache']);
	$inCache = $oCore_Cache->get($cacheKey, $cacheName);
	
	if (!is_null($inCache))
	{
		var_dump($inCache);
	}
}

В кэш можно вносить не только строки, но и массивы, в таком случае проверка будет не на !is_null(), а is_array().

Запись в кэш

Для записи используется метод ->set(), в примере подразумевается наличие $oCore_Cache, а также переменных с ключом и названием кэша.

if (Core::moduleIsActive('cache'))
{
	// Запись в кэш значения $value
	$oCore_Cache->set($cacheKey, $value, $cacheName);
}

Элементы кэша можно теггировать (соответствующая опция должна быть включена в конфигурационном файле), это позволяет удалять элементы кэша не по ключу, а по тегу.

if (Core::moduleIsActive('cache'))
{
	// Метки, по которым может быть удален ключ из кэша
	$aTags = array('foo', 'bar');

	// Запись в кэш значения $value с указанием уникальных меток
	$oCore_Cache->set($cacheKey, $value, $cacheName, $aTags);
}

Удаление из кэша

Множество элементов, кэшируемых в типовых контроллерах показа, в случае использования теuгированного кэша, могут быть удалены иp кэша вызовом метода clearCache() у соответствующей модели, например:

$oShop_Item = Core_Entity::factory('Shop_Item', 123);
$oShop_Item->clearCache();

Удаление по ключу:

if (Core::moduleIsActive('cache'))
{
	Core_Cache::instance(Core::$mainConfig['defaultCache'])
		->delete($cacheKey, $cacheName);
}

Удаление из кэша всех ключей, для которых был указан тег 'foo':

if (Core::moduleIsActive('cache'))
{
	Core_Cache::instance(Core::$mainConfig['defaultCache'])
		->deleteByTag('foo');
}

Удаление из кэша $cacheName всех ключей:

if (Core::moduleIsActive('cache'))
{
	Core_Cache::instance(Core::$mainConfig['defaultCache'])
		->deleteAll($cacheName);
}

Не нашли ответ на свой вопрос в документации? Направьте обращение в или онлайн чат.