Кэширование

Кэширование — это простой и эффективный способ повысить производительность веб-приложения. Сохраняя относительно статичные данные в кэше и извлекая их из кэша, когда потребуется, мы экономим время, затрачиваемое на генерацию данных.

Использование кэша в Yii подразумевает, главным образом, конфигурирование и обращение к компоненту кэширования. Ниже приведена конфигурация приложения, определяющая компонент кэширования, использующий memcache с двумя кэш-серверами.

array('components'=>array('cache'=>array(
            'class'=>'system.caching.CMemCache',
            'servers'=>array(
                array('host'=>'server1', 'port'=>11211, 'weight'=>60),
                array('host'=>'server2', 'port'=>11211, 'weight'=>40),
            ),
        ),
    ),
);

В ходе работы приложения обратиться к компоненту кэширования можно следующим образом: Yii::app()->cache.

Yii предоставляет несколько компонентов кэширования, которые могут сохранять кэшированные данные в различных хранилищах. Например, компонент CMemCache инкапсулирует расширение memcache для PHP и использует оперативную память в качестве хранилища; компонент CApcCache инкапсулирует расширение APC для PHP; компонент CDbCache сохраняет кэшируемые данные в базе данных. Ниже приведён список доступных компонентов кэширования:

Подсказка: Все перечисленные компоненты кэширования наследуют базовый класс CCache, поэтому можно переключаться между различными типами кэширования без изменения кода, использующего кэш.

Кэширование может использоваться на различных уровнях. На низшем уровне мы используем кэширование для хранения «атомарных» (одиночных) данных, таких как переменные, и называем это кэшированием данных. На следующем уровне мы храним в кэше фрагменты страниц, генерируемые частью скрипта представления. И наконец, на высшем уровне мы храним в кэше целую страницу и извлекаем её из кэша при необходимости.

В следующих подразделах мы подробно разберём, как использовать кэширование на этих уровнях.

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