Документация InstantCMS

для администраторов и разработчиков

Инструменты пользователя

Инструменты сайта


dev:models:cache

Кеширование и состояние модели

В данном разделе описывается работа с кэшированием результатов запросов и управление состояниями модели. Под кэшированием подразумевается работа с данными, которые хранятся в Memcache/Memcached/Files/Redis, т.е. в том методе кэширования, который включен в настройках сайта. Если глобально кэширование не включено в настройках, вызов методов игнорируется.

Все примеры кода подразумевают, что действие происходит в контексте модели (т.е. внутри класса вашей модели, унаследованного от cmsModel).

useCache()

useCache($key)

Включает кеширование результата текущего запроса под указанным ключом. Это значит, что первый выбор данных из БД будет записан в кэш. Последующие выборки будут уже не из БД, а из метода кэширования. Учитывайте, что при кэшировании также работает опция «Время жизни кеша».

$item = $this->
    useCache('articles.item')->
    getItemById('articles', $id);

Фактический ключ дополняется CRC32B от сформированного SQL, поэтому разные запросы под одним namespace не конфликтуют.

После выполнения операции ключ кеша автоматически отключается.

stopCache()

Защищённый внутренний метод, отключающий текущий ключ кеша.

Принудительная очистка кэша

cmsCache::getInstance()->clean($key)

В операциях SELECT данные, при включенном кешировании, записываются и получаются из метода кэширования. В операциях изменения записей, INSERT/UPDATE, в ваших методах вы должны очищать данные в кэше по вашему имени ключа. Учитывая пример выше:

public function addArticle($entry) {
 
    cmsCache::getInstance()->clean('articles.item');
 
    return $this->insert('articles', $entry);
}
 
public function updateArticle($id, $entry) {
 
    cmsCache::getInstance()->clean('articles.item');
 
    return $this->update('articles', $id, $entry);
}

Статический кеш внутри запроса

cacheResult()

cacheResult($key, $data)

Сохраняет произвольные данные в статическом массиве $cached. Использовать этот метод вы можете где угодно в своём коде.

cmsModel::cacheResult('current_ctype', $ctype);

getCachedResult()

getCachedResult($key)

Возвращает ранее сохранённые данные либо null.

Это отличается от useCache(): здесь используется статический массив PHP в рамках текущего выполнения.

$ctype = cmsModel::getCachedResult('current_ctype');

Сброс состояния

resetFilters()

Название историческое: метод сбрасывает не только WHERE, но и практически весь построитель запроса.

Сбрасываются:

  • SELECT;
  • encoded fields;
  • GROUP BY;
  • ORDER BY;
  • index hints;
  • LIMIT;
  • read type;
  • JOIN;
  • DISTINCT;
  • STRAIGHT JOIN;
  • состояние присоединённой online-таблицы.

Если keep_filters = false, также сбрасываются WHERE и системные флаги фильтрации.

lockFilters() / unlockFilters()

Используются, когда несколько операций должны использовать одни и те же условия.

Пример:

$this->
    filterEqual('user_id', $user_id)->
    lockFilters();
 
$count = $this->getCount('articles');
$items = $this->get('articles');
 
$this->unlockFilters();

Следует учитывать, что lockFilters() сохраняет именно условия фильтрации, а остальные части построителя запроса всё равно сбрасываются resetFilters().

Назад, к оглавлению раздела "Модели"


Назад, к оглавлению документации для разработчиков

dev/models/cache.txt · Последнее изменение: fuze

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki