{{tag>yii1 cache}}

====== Кеширование ======

====== Подключение ======

<code php>
  'components'=>array(
    ...
    // Отключаем кеш
    'cache'=>array('class'=>'system.caching.CDummyCache'),
    // Кеширование
    //'cache'=>array('class'=>'system.caching.CFileCache'),
    //'cache'=>array('class'=>'system.caching.CApcCache'),
    //'cache'=>array('class'=>'system.caching.CMemCache', 'servers'=>array(array('host'=>'localhost', 'port'=>'11211', 'weight'=>'100')
    ...
  ),
</code>

====== Настройки ======

====== Использование ======

===== База =====


==== DAO ====

<code php>
$sql = 'SELECT * FROM tbl_post LIMIT 20';
// кешируем результат запроса 1000 секунд
$rows = Yii::app()->db->cache(1000)->createCommand($sql)->queryAll();
</code>
Если данные в таблице меняются, можно попробовать инвалидировать кеш, используя менее затратный запрос:

<code php>
$sql = 'SELECT * FROM tbl_post LIMIT 20';
// сбрасываем кеш, если результат изменился
$dependency = new CDbCacheDependency('SELECT MAX(update_time) FROM tbl_post');
// кешируем на 1000 секунд
$rows = Yii::app()->db->cache(1000, $dependency)->createCommand($sql)->queryAll();
</code>
==== AR ====

<code php>
$posts = Post::model()->cache(1000)->findAll();
$posts = Post::model()->cache(1000)->with('author')->findAll();
</code>

===== Представления =====

<code php>
<?php if($this->beginCache($id)) { ?>
---Фрагмент страницы который хотим закэшировать---
<?php $this->endCache(); } ?>
</code>

<code php>
if($this->beginCache('emem_catalog', 
  array('duration'=>60*60*24*365,'dependency'=>array(
     'class'=>'system.caching.dependencies.CDirectoryCacheDependency',
     'directory'=>$dir_to_check)))) {     
  $this->widget('apposWidgetAppCatalog',array(
    'model'=>$this->model,   
  ));
  $this->endCache();
</code>

===== Кэширование страниц =====

  * http://www.yiiframework.com/doc/guide/1.1/ru/caching.page#http-caching
====== Ссылки ======

  * [[http://habrahabr.ru/post/140414/|Кеширование в Yii с помощью тегов]]
