Работа с кэшем в собственных модулях
Работа с кэшем производится с учетом имени кэша, которое задается в конфигурационном файле, и ключом кэша (уникальная строка, идентифицирующая сохраненные в кэше данные).
Чтение из кэша
В случае, если вы работаете с собственным контроллером, получения ключа производится через $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);
}