Commit 6c598340 by Alexander Makarov

Adjusted Russian translation

parent 926eed4c
Кэширование данных Кэширование данных
================== ==================
Кэширование данных — это сохранение некоторой переменной PHP в кэше и последующее её извлечение оттуда. Кэширование данных заключается в сохранении некоторой переменной PHP в кэше и последующее её извлечение. Оно является
Это также является основой для более расширенных возможностей кэширования, например, [кэширование запросов](#query-caching) основой для расширенных возможностей, таких как [кэширование запросов](#query-caching)
и [кэширование страниц](caching-page.md). и [кэширование страниц](caching-page.md).
Следующий код является типичным случаем использования модели кэширования данных, где `$cache` относится к [компоненту кеширования](#cache-components): Приведённый ниже код является типичным случаем кэширования данных, где `$cache` указывает на [компонент кеширования](#cache-components):
```php ```php
// Извлечение $data из кэша // Пробуем извлечь $data из кэша.
$data = $cache->get($key); $data = $cache->get($key);
if ($data === false) { if ($data === false) {
// $data не найдена в кэше, получить по новой // $data нет в кэше, считаем с нуля.
// сохранить $data в кэше так, чтобы данные можно было получить в следующий раз // Сохраняем значение $data в кэше. Данные можно получить в следующий раз.
$cache->set($key, $data); $cache->set($key, $data);
} }
// $data данные доступны тут // Значение $data доступно здесь.
``` ```
## Компоненты кеширования <a name="cache-components"></a> ## Компоненты кеширования <a name="cache-components"></a>
Кэширование данных опирается на так называемые *компоненты кэширования*, которые представляют различные кэш-хранилища, такие как память, файлы и базы данных. Кэширование данных опирается на *компоненты кэширования*, которые представляют различные хранилища, такие как память,
файлы и базы данных.
Кэш-компоненты, как правило, зарегистрированы в качестве [компонентов приложения](structure-application-components.md), так Кэш-компоненты, как правило, зарегистрированы в качестве [компонентов приложения](structure-application-components.md), так
что они могут быть глобально настраиваемыми и доступными. что их можно настраивать и обращаться к ним глобально. Следующий код показывает, как настроить компонент приложения `cache`
Следующий код показывает, как настроить `cache` компонент приложения, для использования [Memcached](http://memcached.org/) с двумя кэш-серверами: для использования [Memcached](http://memcached.org/) с двумя серверами:
```php ```php
'components' => [ 'components' => [
...@@ -51,10 +52,11 @@ if ($data === false) { ...@@ -51,10 +52,11 @@ if ($data === false) {
], ],
``` ```
Вы можете получить доступ к компоненту кэша, используя следующее выражение: `Yii::$app->cache`. Вы можете получить доступ к компоненту кэша, используя выражение `Yii::$app->cache`.
Поскольку все компоненты кэша поддерживают тот же набор API-интерфейсов, вы можете поменять основной компонент кэша на другой компонент кэша путём перенастройки конфигурации приложения не меняя код, использующий кэш. Поскольку все компоненты кэша поддерживают единый API-интерфейс, вы можете менять основной компонент кэша на другой
Например, вы можете изменить конфигурацию, чтобы использовать [[yii\caching\ApcCache|APC cache]]: через конфигурацию приложения. Код, использующий кэш, при этом не меняется. Например, конфигурацию выше для использования
[[yii\caching\ApcCache|APC cache]] можно изменить следующим образом:
```php ```php
...@@ -66,59 +68,68 @@ if ($data === false) { ...@@ -66,59 +68,68 @@ if ($data === false) {
``` ```
> Совет: Вы можете зарегистрировать несколько кэш-компонентов приложения. Компонент с именем `cache` используется > Совет: Вы можете зарегистрировать несколько кэш-компонентов приложения. Компонент с именем `cache` используется
по умолчанию со многими классами (например, [[yii\web\UrlManager]]). по умолчанию многими классами (например, [[yii\web\UrlManager]]).
### Поддерживаются следующие кэш-хранилища <a name="supported-cache-storage"></a> ### Поддерживаемые хранилища <a name="supported-cache-storage"></a>
Yii поддерживает широкий круг кэш-хранилищь. Краткая сводка: Yii поддерживает множество хранилищ кэша:
* [[yii\caching\ApcCache]]: использует PHP [APC](http://php.net/manual/en/book.apc.php) расширение. Эта опция возможно считается * [[yii\caching\ApcCache]]: использует расширение PHP [APC](http://php.net/manual/en/book.apc.php). Эта опция считается
самой быстрой при работе с кэшем для централизованного высоконагруженного приложения (т.е. один сервер, без выделенного балансировщика нагрузки и т.д.). самой быстрой при работе с кэшем в «толстом» централизованном приложении (т.е. один сервер, без выделенного
* [[yii\caching\DbCache]]: использует таблицу базы данных для хранения кэшированных данных. Чтобы использовать этот кэш, вы должны создать таблицу, как указано в [[yii\caching\DbCache::cacheTable]]. балансировщика нагрузки и т.д.).
* [[yii\caching\DummyCache]]: служит кэш-заполнителем, который не делает никакого реального кэширования. Цель этого компонента заключается в упрощении кода, который должен проверить наличие кэш-памяти. Например, при разработке или если сервер не имеет реальную поддержку кэша, вы можете настроить кэш-компонент использовать данный тип кэна. Когда фактическая поддержка кэша включена, вы можете переключиться на использование соответствующего компонента кэша. В обоих случаях, вы можете использовать тот же самый код * [[yii\caching\DbCache]]: использует таблицу базы данных для хранения кэшированных данных. Чтобы использовать этот кэш,
`Yii::$app->cache->get($key)` попытаться извлечь данных из кэша, не беспокоясь, что вы должны создать таблицу, как описано в [[yii\caching\DbCache::cacheTable]].
`Yii::$app->cache` может быть `null`. * [[yii\caching\DummyCache]]: является кэшем-пустышкой, не реализующим реального кэширования. Смысл этого компонента в
* [[yii\caching\FileCache]]: использует стандартные файлы для хранения кэшированных данных. Это особенно подходит для кэширования больших кусков данных, таких как содержимое страницы. упрощении кода, который должен проверить наличие кэша. Вы можете использовать данный тип кэша, например, при разработке
* [[yii\caching\MemCache]]: использует PHP [memcache](http://php.net/manual/en/book.memcache.php) или если сервер не поддерживает кэш и переключиться на реальное кеширование позже. Для извлечения данных, в этом случае,
and [memcached](http://php.net/manual/en/book.memcached.php) расширение. Эта опция может рассматриваться как самая быстрая при работе с кэшем в распределенных приложениях (например, с несколькими серверами, балансировки нагрузки и т.д.) используется один и тот же код `Yii::$app->cache->get($key)`. При этом можно не беспокоиться, что `Yii::$app->cache`
* [[yii\redis\Cache]]: реализует компонент кэша на основе [Redis](http://redis.io/), хранилище ключ-значение (Redis версия 2.6.12 или выше). может быть `null`.
* [[yii\caching\WinCache]]: использует PHP [WinCache](http://iis.net/downloads/microsoft/wincache-extension) * [[yii\caching\FileCache]]: использует обычные файлы для хранения кэшированных данных. Замечательно подходит для
([see also](http://php.net/manual/en/book.wincache.php)) расширение. кэширования больших кусков данных, таких как содержимое страницы.
* [[yii\caching\XCache]]: использует PHP [XCache](http://xcache.lighttpd.net/) расширение. * [[yii\caching\MemCache]]: использует расширения PHP [memcache](http://php.net/manual/en/book.memcache.php)
и [memcached](http://php.net/manual/en/book.memcached.php). Этот вариант может рассматриваться как самый быстрый при
работе в распределенных приложениях (например, с несколькими серверами, балансировкой нагрузки и так далее).
* [[yii\redis\Cache]]: реализует компонент кэша на основе [Redis](http://redis.io/), хранилища ключ-значение (требуется
Redis версии 2.6.12 или выше).
* [[yii\caching\WinCache]]: использует расширение PHP [WinCache](http://iis.net/downloads/microsoft/wincache-extension)
([смотрите также](http://php.net/manual/en/book.wincache.php)) .
* [[yii\caching\XCache]]: использует расширение PHP [XCache](http://xcache.lighttpd.net/).
* [[yii\caching\ZendDataCache]]: использует * [[yii\caching\ZendDataCache]]: использует
[Zend Data Cache](http://files.zend.com/help/Zend-Server-6/zend-server.htm#data_cache_component.htm) [Zend Data Cache](http://files.zend.com/help/Zend-Server-6/zend-server.htm#data_cache_component.htm).
в качестве базовой среды кэширования.
> Совет: Вы можете использовать разные способы хранения кэша в одном приложении. Общая стратегия заключается в использовании памяти на основе кэш-хранилища для хранения небольших данных, которые постоянно используются (например, статистические данные) и использовать файло-ориентированные или БД-ориентированные кэш-хранилища, чтобы хранить данные которые используются более менее часто (например, содержимое страницы). > Совет: Вы можете использовать разные способы хранения кэша в одном приложении. Общая стратегия заключается в использовании
памяти под хранение небольших часто используемых данных (например, статистические данные). Для больших и реже используемых
данных (например, содержимое страницы) лучше использовать файлы или базу данных.
## Кэш API, <a name="cache-apis"> </a> ## Кэш API, <a name="cache-apis"> </a>
У всех компонентов кэша один базовый класс [[yii\caching\Cache]] таким образом, поддерживаются следующие интерфейсы: У всех компонентов кэша один базовый класс [[yii\caching\Cache]] со следующими методами:
* [[yii\caching\Cache::get()|get()]]: возвращает данные из кэша с указанным ключом. Значение false * [[yii\caching\Cache::get()|get()]]: возвращает данные по указанному ключу. Значение `false`
будет возвращено, если данные не найдены в кэше или их срок истек/недействителен. будет возвращено, если данные не найдены или устарели.
* [[yii\caching\Cache::set()|set()]]: сохраняет данные идентифицированные по ключу кэша. * [[yii\caching\Cache::set()|set()]]: сохраняет данные по ключу.
* [[yii\caching\Cache::add()|add()]]: сохраняет элемент данных, идентифицированный ключом в кэше, если ключ не найден в кэше. * [[yii\caching\Cache::add()|add()]]: сохраняет данные по ключу если такого ключа ещё нет.
* [[yii\caching\Cache::mget()|mget()]]: извлекает несколько элементов данных из кэша с заданными ключами. * [[yii\caching\Cache::mget()|mget()]]: извлекает сразу несколько элементов данных из кэша по заданным ключам.
* [[yii\caching\Cache::mset()|mset()]]: хранит множество элементов данных в кэше. Каждый элемент идентифицируется ключом. * [[yii\caching\Cache::mset()|mset()]]: сохраняет несколько элементов данных. Каждый элемент идентифицируется ключом.
* [[yii\caching\Cache::madd()|madd()]]: хранит множество элементов данных в кэше. Каждый элемент идентифицируется ключом. * [[yii\caching\Cache::madd()|madd()]]: сохраняет несколько элементов данных. Каждый элемент идентифицируется ключом.
Если ключ уже существует в кэше, элемент данных будет пропущен. Если ключ уже существует, сохранение не происходит.
* [[yii\caching\Cache::exists()|exists()]]: возвращает значение, указывающее, является ли указанный ключ найденным в кэше. * [[yii\caching\Cache::exists()|exists()]]: есть ли указанный ключ в кэше.
* [[yii\caching\Cache::delete()|delete()]]: удаляет элемент данных, определенных с помощью ключа из кэша. * [[yii\caching\Cache::delete()|delete()]]: удаляет указанный ключ.
* [[yii\caching\Cache::flush()|flush()]]: удаляет все элементы данных из кэша. * [[yii\caching\Cache::flush()|flush()]]: удаляет все данные.
> Примечание: Не кэшируйте непосредственно значение `false`, потому что [[yii\caching\Cache::get()|get()]] использует метод > Примечание: Не кэшируйте непосредственно значение `false`, потому что [[yii\caching\Cache::get()|get()]] использует
`false` как возвращаемое значение, чтобы указать, на то, что данные не найдены в кэше. Вы можете обернуть false` в `массив` и закэшировать этот массив, чтобы избежать данной проблемы. `false` для случая, когда данные не найдены в кэше. Вы можете обернуть `false` в массив и закэшировать его, чтобы
избежать данной проблемы.
Некоторые кэш-хранилища, например, MemCache или APC, поддерживают загрузку нескольких кэшированных значений в пакетном режиме, Некоторые кэш-хранилища, например, MemCache или APC, поддерживают получение нескольких значений в пакетном режиме,
что может уменьшить накладные расходы на получение кэшированных данных. API-интерфейсы [[yii\caching\Cache::mget()|mget()]] что может сократить накладные расходы на получение данных. Данную возможность можно использовать при помощи
и [[yii\caching\Cache::madd()|madd()]] используют эту особенность. В случае, если кэш-хранилище [[yii\caching\Cache::mget()|mget()]] и [[yii\caching\Cache::madd()|madd()]]. В случае, если хранилище не поддерживает
не поддерживает эту функцию, то она будет имитироваться. эту функцию, она будет имитироваться.
Потому что [[yii\caching\Cache]] принадлежащий Аррей Акссесу как компонент может использоваться как массив. Ниже приведены некоторые примеры: Так как [[yii\caching\Cache]] реализует `ArrayAccess`, компонент кеша можно испльзовать как массив:
```php ```php
$cache['var1'] = $value1; // эквивалентно: $cache->set('var1', $value1); $cache['var1'] = $value1; // эквивалентно: $cache->set('var1', $value1);
...@@ -128,32 +139,34 @@ $value2 = $cache['var2']; // эквивалентно: $value2 = $cache->get('v ...@@ -128,32 +139,34 @@ $value2 = $cache['var2']; // эквивалентно: $value2 = $cache->get('v
### Ключи кэша <a name="cache-keys"></a> ### Ключи кэша <a name="cache-keys"></a>
Каждый элемент данных хранящийся в кэше идентифицируется ключом. Когда вы сохраняете элемент данных в кэше, Вы должны указать для него ключ. Позже, когда вы извлекаете элемент данных из кэша, вы должны предоставить соответствующий ключ. Каждый элемент данных, хранящийся в кэше, идентифицируется ключом. Когда вы сохраняете элемент данных в кэше, необходимо
указать для него ключ. Позже, когда вы извлекаете элемент данных из кэша, вы должны предоставить соответствующий ключ.
Вы можете использовать строку или произвольное значение в качестве ключа кэша. Если ключ не строка, то она будет автоматически собираться по частям в строку. Вы можете использовать строку или произвольное значение в качестве ключа кэша. Если ключ не строка, то он будет
автоматически сериализован в строку.
Общая стратегия определения кэш ключей нужна чтобы включить все определяющие факторы с точки зрения массива. Обычно ключ задаётся массивом всех значимых частей. Например, для хранении информации о таблице в [[yii\db\Schema]]
Например, [[yii\db\Schema]] использует следующие символы информации кэш схемы о таблице базы данных: для ключа используются следующие части:
```php ```php
[ [
__CLASS__, // название класса схемы __CLASS__, // Название класса схемы.
$this->db->dsn, // Данные подключения, базы данных $this->db->dsn, // Данные для соединения с базой.
$this->db->username, // Данные подключения, логин пользователя $this->db->username, // Логин для соединения с базой.
$name, // название таблицы $name, // Название таблицы.
]; ];
``` ```
Как вы можете видеть, ключ включает в себя все необходимое, чтобы однозначно указать таблицу базы данных необходимую информацию. Как вы можете видеть, ключ строится так, чтобы однозначно идентифицировать данные таблицы.
Когда это же кэш-хранилище используется различными приложениями, вы должны указать ключевой префикс уникальным кэшем для каждого приложения, чтобы избежать конфликтов ключей кэша. Это может быть сделано путем настройки Если одно хранилище кэша используется несколькими приложениями, во избежание конфликтов стоит указать префикс ключа.
[[yii\caching\Cache::keyPrefix]] свойств. Например, в конфигурации приложения вы можете написать следующий код: Сделать это можно путём настройки [[yii\caching\Cache::keyPrefix]]:
```php ```php
'components' => [ 'components' => [
'cache' => [ 'cache' => [
'class' => 'yii\caching\ApcCache', 'class' => 'yii\caching\ApcCache',
'keyPrefix' => 'myapp', // уникальная приставка ключей кеша 'keyPrefix' => 'myapp', // уникальный префикс ключей кэша
], ],
], ],
``` ```
...@@ -163,7 +176,11 @@ $value2 = $cache['var2']; // эквивалентно: $value2 = $cache->get('v ...@@ -163,7 +176,11 @@ $value2 = $cache['var2']; // эквивалентно: $value2 = $cache->get('v
### Срок действия кэша <a name="cache-expiration"></a> ### Срок действия кэша <a name="cache-expiration"></a>
Элементы данных, которые хранятся в кэше остаются там навсегда, если только они не будут удалены из-за некоторых условий функционирования кэша (например, место для кэширования заполнено и старые данные удаляются). Чтобы изменить этот режим, вы можете предоставить истечение срока действия параметра при вызове метода [[yii\caching\Cache::set()|set()]], для хранения элемента данных. Параметр указывает, на сколько секунд элемент данных может оставаться в кэше. Когда вы вызываете [[yii\caching\Cache::get()|get()]], чтобы получить элемент данных, если его срок годности прошел, то метод вернется ложным (false), что указывает на то, что элемент данных не найден в кэше. Например: Элементы данных, хранимые в кэше, остаются там навсегда если только они не будут удалены из-за особенностей
функционирования хранилища (например, место для кэширования заполнено и старые данные удаляются). Чтобы изменить этот
режим, вы можете передать истечение срока действия ключа при вызове метода [[yii\caching\Cache::set()|set()]].
Параметр указывает, сколько секунд элемент кеша может считаться актуальным. Если срок годности ключа истёк,
[[yii\caching\Cache::get()|get()]] вернёт `false`:
```php ```php
...@@ -174,26 +191,30 @@ sleep(50); ...@@ -174,26 +191,30 @@ sleep(50);
$data = $cache->get($key); $data = $cache->get($key);
if ($data === false) { if ($data === false) {
// $data срок действия истек или не найден в кэше // срок действия истек или ключ не найден в кэше
} }
``` ```
### Зависимости кэша <a name="cache-dependencies"></a> ### Зависимости кэша <a name="cache-dependencies"></a>
Кроме настроек срока действия кэша, кешированный элемент может быть признан недействительным из-за изменения зависимостей к примеру [[yii\caching\FileDependency]] представляет собой зависимость времени изменения файла когда эта зависимость(имеется ввиду время) изменяется эт значит что файл изменился. Как результат, любой устаревший контент найденный в кеше должен быть признан недействительным и вызов [[yii\caching\Cache::get()|get()]] вернет false. В добавок к изменеию срока действия ключа, элемент может быть признан недействительным из-за *изменения зависимостей*.
К примеру, [[yii\caching\FileDependency]] представляет собой зависимость от времени изменения файла. Когда это время
изменяется, и файл. Любые устаревшие данные, найденные в кэше должны быть признаны недействительным, а
[[yii\caching\Cache::get()|get()]] в этом случае должен вернуть `false`.
Зависимости кэша представлены в виде объектов [[yii\caching\Dependency]] классов-потомков. Когда вы вызываете метод [[yii\caching\Cache::set()|set()]], чтобы сохранить элемент данных в кэше, вы можете пройти по соответствующей кэш-зависимости объекта. Например: Зависимости кэша представлены в виде объектов потомков класса [[yii\caching\Dependency]]. Когда вы вызываете метод
[[yii\caching\Cache::set()|set()]], чтобы сохранить элемент данных в кэше, вы можете передать туда зависимость. Например:
```php ```php
// Создать зависимость от времени модификации файла example.txt. // Создать зависимость от времени модификации файла example.txt.
$dependency = new \yii\caching\FileDependency(['fileName' => 'example.txt']); $dependency = new \yii\caching\FileDependency(['fileName' => 'example.txt']);
// Данные истекают через 30 секунд. // Данные устаревеют через 30 секунд.
// Данные могут стать недействительными и раньше, если example.txt будет изменен. // Данные могут устареть и раньше, если example.txt будет изменён.
$cache->set($key, $data, 30, $dependency); $cache->set($key, $data, 30, $dependency);
// Кэш будет проверен, если данные истекли. // Кэш будет проверен, если данные устарели.
// Он также будет проверен, если указанная зависимость была изменена. // Он также будет проверен, если указанная зависимость была изменена.
// Вернется false, если какое-либо из этих условий выполнено. // Вернется false, если какое-либо из этих условий выполнено.
$data = $cache->get($key); $data = $cache->get($key);
...@@ -202,53 +223,56 @@ $data = $cache->get($key); ...@@ -202,53 +223,56 @@ $data = $cache->get($key);
Ниже приведен список доступных зависимостей кэша: Ниже приведен список доступных зависимостей кэша:
- [[yii\caching\ChainedDependency]]: зависимость меняется, если любая зависимость в цепочке изменяется. - [[yii\caching\ChainedDependency]]: зависимость меняется, если любая зависимость в цепочке изменяется.
- [[yii\caching\DbDependency]]: зависимость меняется, если результат некоторого определенного SQL запроса изменен. - [[yii\caching\DbDependency]]: зависимость меняется, если результат некоторого определенного SQL запроса изменён.
- [[yii\caching\ExpressionDependency]]: зависимость меняется, если результат определенного PHP выражения изменен. - [[yii\caching\ExpressionDependency]]: зависимость меняется, если результат определенного PHP выражения изменён.
- [[yii\caching\FileDependency]]: зависимость меняется, если изменилось время последней модификации файла. - [[yii\caching\FileDependency]]: зависимость меняется, если изменилось время последней модификации файла.
- [[yii\caching\TagDependency]]: Связывает кэшированные данные элемента с одним или несколькими тегами. Вы можете аннулировать кэширование данных элементов с заданным тегом(тегами) по вызову. [[yii\caching\TagDependency::invalidate()]]. - [[yii\caching\TagDependency]]: Связывает кэшированные данные элемента с одним или несколькими тегами. Вы можете
аннулировать кэширование данных элементов с заданным тегом(тегами) по вызову. [[yii\caching\TagDependency::invalidate()]].
## Кэширование запросов <a name="query-caching"></a> ## Кэширование запросов <a name="query-caching"></a>
Кэширование запросов - это специальная функция кэширования построеная на вершине данных кеширования. Кэширование запросов - это специальная функция кэширования, построеная на основе кэширования данных.
Она предназначена для кеширования результатов запросов к базе данных. Она предназначена для кэширования результатов запросов к базе данных.
Кеширование запросов требует [[yii\db\Connection|DB connection]] и действительный `Кэш компонент` приложения. Простое использование Кэширование запросов требует [[yii\db\Connection|DB connection]] и приложения действительный `cache`. Простое использование
запросов кэширования происходит следующим образом, предпологая что `$db` это экземпляр [[yii\db\Connection]]: запросов кэширования происходит следующим образом, предпологая что `$db` это экземпляр [[yii\db\Connection]]:
```php ```php
$result = $db->cache(function ($db) { $result = $db->cache(function ($db) {
// Результат SQL запроса будет возвращен из кэша // Результат SQL запроса будет возвращен из кэша если
// Если кэширование запросов включено и результат запроса присутствует в кэше // кэширование запросов включено и результат запроса присутствует в кэше
return $db->createCommand('SELECT * FROM customer WHERE id=1')->queryOne(); return $db->createCommand('SELECT * FROM customer WHERE id=1')->queryOne();
}); });
``` ```
Кэширование запросов может быть использованно для [DAO](db-dao.md), а также [ActiveRecord](db-active-record.md). Кэширование запросов может быть использованно как для [DAO](db-dao.md), так и для [ActiveRecord](db-active-record.md).
> Информация: Некоторые СУБД (например, [MySQL](http://dev.mysql.com/doc/refman/5.1/en/query-cache.html)) также поддерживает кэширование запросов на стороне сервера БД. Вы можете использовать любой механизм кэширования запросов. Кэширование запросов описанное выше, имеет преимущество, поскольку можно указать гибкие зависимости кэша и это более эффективно. > Информация: Некоторые СУБД (например, [MySQL](http://dev.mysql.com/doc/refman/5.1/en/query-cache.html)) поддерживают
кэширование запросов на стороне сервера БД. Вы можете использовать любой механизм кэширования запросов. Кэширование
запросов описанное выше, имеет преимущество, поскольку можно указать гибкие зависимости кэша и это более эффективно.
### Конфигурации <a name="query-caching-configs"></a> ### Конфигурации <a name="query-caching-configs"></a>
Кэширование запросов имеет три глобальных конфигурационных параметра через [[yii\db\Connection]]: Кэширование запросов имеет три глобальных конфигурационных параметра через [[yii\db\Connection]]:
* [[yii\db\Connection::enableQueryCache|enableQueryCache]]: whether to turn on or off query caching. * [[yii\db\Connection::enableQueryCache|enableQueryCache]]: включить или выключить кэширование запросовю.
It defaults to true. Note that to effectively turn on query caching, you also need to have a valid По умолчанию `true`. Стоит отметить, что для использования кэширования вам может понадобиться компонент
cache, as specified by [[yii\db\Connection::queryCache|queryCache]]. cache, как показано в [[yii\db\Connection::queryCache|queryCache]].
* [[yii\db\Connection::queryCacheDuration|queryCacheDuration]]: this represents the number of seconds * [[yii\db\Connection::queryCacheDuration|queryCacheDuration]]: количество секунд, в течение которых результат кэшируется.
that a query result can remain valid in the cache. You can use 0 to indicate a query result should Для бесконечного кэша используйте `0`. Именно это значение выставляется [[yii\db\Connection::cache()]] если не указать
remain in the cache forever. This property is the default value used when [[yii\db\Connection::cache()]] время явно.
is called without specifying a duration. * [[yii\db\Connection::queryCache|queryCache]]: ID компонента кэширования. По умолчанию `'cache'`. Кэширования запросов
* [[yii\db\Connection::queryCache|queryCache]]: this represents the ID of the cache application component. работает только если используется компонент приложения кэш.
It defaults to `'cache'`. Query caching is enabled only if there is a valid cache application component.
### Использование <a name="query-caching-usages"></a> ### Использование <a name="query-caching-usages"></a>
Вы можете использовать [[yii\db\Connection::cache()]], если у вас есть несколько SQL запросов, которые необходимо закэшировать. Использование выглядит следующим образом: Вы можете использовать [[yii\db\Connection::cache()]], если у вас есть несколько SQL запросов, которые необходимо
закэшировать:
```php ```php
$duration = 60; // кэширование результата на 60 секунд $duration = 60; // кэширование результата на 60 секунд
...@@ -264,10 +288,11 @@ $result = $db->cache(function ($db) { ...@@ -264,10 +288,11 @@ $result = $db->cache(function ($db) {
``` ```
Любые SQL запросы в анонимной функции будут кэшироваться в течении указанного промежутка времени с заданной зависимостью. Любые SQL запросы в анонимной функции будут кэшироваться в течении указанного промежутка времени с заданной зависимостью.
Если результат запроса в кэше - дейтсвительный, запрос будет пропущен и результат будет возвращен из кеша, вметсо SQL запроса. Если результат в кэше актуален, запрос будет пропущен и, вместо этого, из кэша будет возвращен результат. Если вы не
Если вы не укажите '$duration' параметра, значение [[yii\db\Connection::queryCacheDuration|queryCacheDuration]] будет использоваться вместо этого. укажете `'$duration'`, значение [[yii\db\Connection::queryCacheDuration|queryCacheDuration]] будет использоваться вместо него.
Иногда в пределах "cache()" вы можете отключить кэширование запроса для определённых запросов. Вы можете использовать [[yii\db\Connection::noCache()]] в этом случае. Иногда в пределах `"cache()"` вы можете отключить кэширование запроса. В этом случае вы можете использовать
[[yii\db\Connection::noCache()]].
```php ```php
$result = $db->cache(function ($db) { $result = $db->cache(function ($db) {
...@@ -286,7 +311,8 @@ $result = $db->cache(function ($db) { ...@@ -286,7 +311,8 @@ $result = $db->cache(function ($db) {
}); });
``` ```
Если вы просто хотите использовать кэширование для одного запроса, вы можете вызвать [[yii\db\Command::cache()]] при построении конманды. Например: Если вы просто хотите использовать кэширование для одного запроса, вы можете вызвать [[yii\db\Command::cache()]] при
построении конманды. Например:
```php ```php
// использовать кэширование запросов и установить срок действия кэша на 60 секунд // использовать кэширование запросов и установить срок действия кэша на 60 секунд
...@@ -312,7 +338,8 @@ $result = $db->cache(function ($db) { ...@@ -312,7 +338,8 @@ $result = $db->cache(function ($db) {
### Ограничения <a name="query-caching-limitations"></a> ### Ограничения <a name="query-caching-limitations"></a>
Кэширование запросов не работает с результатами запросов, которые содержат обработчики ресурсов. Например, при использовании типа столбца `BLOB` в некоторых СУБД, в качестве результата запроса будет выведен ресурс Кэширование запросов не работает с результатами запросов, которые содержат обработчики ресурсов. Например, при использовании
обработчик данных столбца. типа столбца `BLOB` в некоторых СУБД, в качестве результата запроса будет выведен ресурс обработчик данных столбца.
Некоторые кэш хранилища имеют ограничение в размере данных. Например, Memcache ограничивает максимальный размер каждой записи до 1 Мб. Таким образом, если результат запроса превышает этот предел, данные не будут закэшированны. Некоторые кэш хранилища имеют ограничение в размере данных. Например, Memcache ограничивает максимальный размер каждой
записи до 1 Мб. Таким образом, если результат запроса превышает этот предел, данные не будут закэшированны.
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment