0 follower

Кэширование

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

Использование кэша в 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 сохраняет кэшируемые данные в базе данных. Далее приведен список доступных компонентов кэширования:

  • CMemCache: использует дополнение memcache для PHP;

  • CApcCache: использует дополнение APC для PHP;

  • CXCache: использует дополнение XCache для PHP. Доступно с версии 1.0.1;

  • CEAcceleratorCache: использует дополнение EAccelerator для PHP;

  • CDbCache: использует таблицы базы данных для хранения кэшируемых данных. По умолчанию создает и использует базу данных SQLite3 во временном каталоге. Мы можем явно определить базу данных установкой свойства connectionID;

  • CZendDataCache: использует Zend Data Cache. Доступно с верии 1.0.4;

  • CFileCache: для хранения кэшированных данных используются файлы. Хорошо подходит для больших единиц данных, таких как целые страницы. Доступно с версии 1.0.6;

  • CDummyCache: кэш-пустышка. Ничего не кэширует. Нужен для упрощения кода, необходимого при проверке доступности кэша. Мы можем воспользоваться данным компонентом во время разработки или в случае, если сервер не поддерживает кэширование. Когда осуществление кэширования будет возможно, мы сможем его применить. В обоих случаях будет использован идентичный код для получения данных Yii::app()->cache->get($key). При этом можно не беспокоиться о том, что Yii::app()->cache может быть равен null. Данный компонент доступен с версии 1.0.5.

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

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

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

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