mirror of
https://github.com/yiisoft/yii.git
synced 2026-03-12 02:56:55 +01:00
90 lines
6.1 KiB
Plaintext
90 lines
6.1 KiB
Plaintext
Кэширование
|
||
===========
|
||
|
||
Кэширование — это простой и эффективный способ повысить производительность
|
||
веб-приложения. Сохраняя относительно статичные данные в кэше и извлекая их из кэша,
|
||
когда потребуется, мы экономим время, затрачиваемое на генерацию данных.
|
||
|
||
Использование кэша в Yii подразумевает, главным образом, конфигурирование и обращение к
|
||
компоненту кэширования. Ниже приведена конфигурация приложения, определяющая компонент кэширования,
|
||
использующий memcache с двумя кэш-серверами.
|
||
|
||
~~~
|
||
[php]
|
||
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](http://php.net/manual/en/book.memcache.php).
|
||
|
||
- [CApcCache]: использует
|
||
[расширение APC для PHP](http://php.net/manual/en/book.apc.php).
|
||
|
||
- [CXCache]: использует
|
||
[расширение XCache для PHP](http://xcache.lighttpd.net/).
|
||
|
||
- [CEAcceleratorCache]: использует
|
||
[расширение EAccelerator для PHP](http://eaccelerator.net/).
|
||
|
||
- [CDbCache]: использует таблицу базы данных для хранения кэшируемых данных.
|
||
По умолчанию создаёт и использует базу данных SQLite3 во временном каталоге.
|
||
Мы можем явно задать используемую базу данных, установив значение свойства
|
||
[connectionID|CDbCache::connectionID].
|
||
|
||
- [CZendDataCache]: использует
|
||
[Zend Data Cache](http://files.zend.com/help/Zend-Server-Community-Edition/data_cache_component.htm).
|
||
|
||
- [CFileCache]: использует файлы для хранения кэшированных данных. Хорошо
|
||
подходит для больших единиц данных (например, страниц).
|
||
|
||
- [CDummyCache]: кэш-пустышка, не осуществляющий кэширование вовсе.
|
||
Необходим для упрощения кода, проверяющего доступность кэша. Мы можем воспользоваться данным
|
||
компонентом во время разработки или в случае, если сервер не поддерживает кэширование.
|
||
Когда "настоящее" кэширование будет включено, мы сможем переключиться на использование
|
||
соответствующего компонента. В обоих случаях мы можем использовать код
|
||
`Yii::app()->cache->get($key)`, чтобы попытаться извлечь кэшированные данные,
|
||
но не беспокоясь о том, что `Yii::app()->cache` может быть равен `null`.
|
||
|
||
|
||
> Tip|Подсказка: Все перечисленные компоненты кэширования наследуют базовый класс
|
||
[CCache], поэтому можно переключаться между различными типами кэширования без
|
||
изменения кода, использующего кэш.
|
||
|
||
Кэширование может использоваться на различных уровнях. На низшем уровне мы
|
||
используем кэширование для хранения «атомарных» (одиночных) данных,
|
||
таких как переменные, и называем это *кэшированием данных*. На следующем уровне
|
||
мы храним в кэше фрагменты страниц, генерируемые частью скрипта представления.
|
||
И наконец, на высшем уровне мы храним в кэше целую страницу и извлекаем её из кэша при
|
||
необходимости.
|
||
|
||
В следующих подразделах мы подробно разберём, как использовать кэширование на
|
||
этих уровнях.
|
||
|
||
> Note|Примечание: По определению, кэш — энергозависимая среда.
|
||
Это означает, что не гарантируется наличие в кэше данных даже в том случае, если они ещё не устарели.
|
||
Поэтому не используйте кэш как постоянное хранилище данных (например, не
|
||
используйте кэш для хранения сессионных данных).
|
||
|
||
<div class="revision">$Id: caching.overview.txt 2890 2011-01-18 15:58:34Z qiang.xue $</div> |