Кешування
=========

Кешування — простий та ефективний спосіб покращення продуктивності веб-додатка.
Зберігаючи відносно статичні дані в кеші і використовуючи ці дані з кешу коли буде потрібно,
ми економимо час генерації даних.

Використання кешу в 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/);

   - [CRedisCache]: використовує [redis](http://redis.io/).

   - [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|Примітка: За визначенням, кеш - енергозалежне середовище. Тому немає гарантій збереження кешованих даних,
навіть якщо вони не старіють. Тому не використовуйте кеш як постійне сховище даних
(наприклад, не використовуйте кеш для зберігання даних сесій).