Commit 6c598340 by Alexander Makarov

Adjusted Russian translation

parent 926eed4c
Кэширование данных
==================
Кэширование данных — это сохранение некоторой переменной PHP в кэше и последующее её извлечение оттуда.
Это также является основой для более расширенных возможностей кэширования, например, [кэширование запросов](#query-caching)
Кэширование данных заключается в сохранении некоторой переменной PHP в кэше и последующее её извлечение. Оно является
основой для расширенных возможностей, таких как [кэширование запросов](#query-caching)
и [кэширование страниц](caching-page.md).
Следующий код является типичным случаем использования модели кэширования данных, где `$cache` относится к [компоненту кеширования](#cache-components):
Приведённый ниже код является типичным случаем кэширования данных, где `$cache` указывает на [компонент кеширования](#cache-components):
```php
// Извлечение $data из кэша
// Пробуем извлечь $data из кэша.
$data = $cache->get($key);
if ($data === false) {
// $data не найдена в кэше, получить по новой
// $data нет в кэше, считаем с нуля.
// сохранить $data в кэше так, чтобы данные можно было получить в следующий раз
// Сохраняем значение $data в кэше. Данные можно получить в следующий раз.
$cache->set($key, $data);
}
// $data данные доступны тут
// Значение $data доступно здесь.
```
## Компоненты кеширования <a name="cache-components"></a>
Кэширование данных опирается на так называемые *компоненты кэширования*, которые представляют различные кэш-хранилища, такие как память, файлы и базы данных.
Кэширование данных опирается на *компоненты кэширования*, которые представляют различные хранилища, такие как память,
файлы и базы данных.
Кэш-компоненты, как правило, зарегистрированы в качестве [компонентов приложения](structure-application-components.md), так
что они могут быть глобально настраиваемыми и доступными.
Следующий код показывает, как настроить `cache` компонент приложения, для использования [Memcached](http://memcached.org/) с двумя кэш-серверами:
что их можно настраивать и обращаться к ним глобально. Следующий код показывает, как настроить компонент приложения `cache`
для использования [Memcached](http://memcached.org/) с двумя серверами:
```php
'components' => [
......@@ -51,10 +52,11 @@ if ($data === false) {
],
```
Вы можете получить доступ к компоненту кэша, используя следующее выражение: `Yii::$app->cache`.
Вы можете получить доступ к компоненту кэша, используя выражение `Yii::$app->cache`.
Поскольку все компоненты кэша поддерживают тот же набор API-интерфейсов, вы можете поменять основной компонент кэша на другой компонент кэша путём перенастройки конфигурации приложения не меняя код, использующий кэш.
Например, вы можете изменить конфигурацию, чтобы использовать [[yii\caching\ApcCache|APC cache]]:
Поскольку все компоненты кэша поддерживают единый API-интерфейс, вы можете менять основной компонент кэша на другой
через конфигурацию приложения. Код, использующий кэш, при этом не меняется. Например, конфигурацию выше для использования
[[yii\caching\ApcCache|APC cache]] можно изменить следующим образом:
```php
......@@ -66,59 +68,68 @@ if ($data === false) {
```
> Совет: Вы можете зарегистрировать несколько кэш-компонентов приложения. Компонент с именем `cache` используется
по умолчанию со многими классами (например, [[yii\web\UrlManager]]).
по умолчанию многими классами (например, [[yii\web\UrlManager]]).
### Поддерживаются следующие кэш-хранилища <a name="supported-cache-storage"></a>
Yii поддерживает широкий круг кэш-хранилищь. Краткая сводка:
* [[yii\caching\ApcCache]]: использует PHP [APC](http://php.net/manual/en/book.apc.php) расширение. Эта опция возможно считается
самой быстрой при работе с кэшем для централизованного высоконагруженного приложения (т.е. один сервер, без выделенного балансировщика нагрузки и т.д.).
* [[yii\caching\DbCache]]: использует таблицу базы данных для хранения кэшированных данных. Чтобы использовать этот кэш, вы должны создать таблицу, как указано в [[yii\caching\DbCache::cacheTable]].
* [[yii\caching\DummyCache]]: служит кэш-заполнителем, который не делает никакого реального кэширования. Цель этого компонента заключается в упрощении кода, который должен проверить наличие кэш-памяти. Например, при разработке или если сервер не имеет реальную поддержку кэша, вы можете настроить кэш-компонент использовать данный тип кэна. Когда фактическая поддержка кэша включена, вы можете переключиться на использование соответствующего компонента кэша. В обоих случаях, вы можете использовать тот же самый код
`Yii::$app->cache->get($key)` попытаться извлечь данных из кэша, не беспокоясь, что
`Yii::$app->cache` может быть `null`.
* [[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\redis\Cache]]: реализует компонент кэша на основе [Redis](http://redis.io/), хранилище ключ-значение (Redis версия 2.6.12 или выше).
* [[yii\caching\WinCache]]: использует PHP [WinCache](http://iis.net/downloads/microsoft/wincache-extension)
([see also](http://php.net/manual/en/book.wincache.php)) расширение.
* [[yii\caching\XCache]]: использует PHP [XCache](http://xcache.lighttpd.net/) расширение.
### Поддерживаемые хранилища <a name="supported-cache-storage"></a>
Yii поддерживает множество хранилищ кэша:
* [[yii\caching\ApcCache]]: использует расширение PHP [APC](http://php.net/manual/en/book.apc.php). Эта опция считается
самой быстрой при работе с кэшем в «толстом» централизованном приложении (т.е. один сервер, без выделенного
балансировщика нагрузки и т.д.).
* [[yii\caching\DbCache]]: использует таблицу базы данных для хранения кэшированных данных. Чтобы использовать этот кэш,
вы должны создать таблицу, как описано в [[yii\caching\DbCache::cacheTable]].
* [[yii\caching\DummyCache]]: является кэшем-пустышкой, не реализующим реального кэширования. Смысл этого компонента в
упрощении кода, который должен проверить наличие кэша. Вы можете использовать данный тип кэша, например, при разработке
или если сервер не поддерживает кэш и переключиться на реальное кеширование позже. Для извлечения данных, в этом случае,
используется один и тот же код `Yii::$app->cache->get($key)`. При этом можно не беспокоиться, что `Yii::$app->cache`
может быть `null`.
* [[yii\caching\FileCache]]: использует обычные файлы для хранения кэшированных данных. Замечательно подходит для
кэширования больших кусков данных, таких как содержимое страницы.
* [[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]]: использует
[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>
У всех компонентов кэша один базовый класс [[yii\caching\Cache]] таким образом, поддерживаются следующие интерфейсы:
У всех компонентов кэша один базовый класс [[yii\caching\Cache]] со следующими методами:
* [[yii\caching\Cache::get()|get()]]: возвращает данные из кэша с указанным ключом. Значение false
будет возвращено, если данные не найдены в кэше или их срок истек/недействителен.
* [[yii\caching\Cache::set()|set()]]: сохраняет данные идентифицированные по ключу кэша.
* [[yii\caching\Cache::add()|add()]]: сохраняет элемент данных, идентифицированный ключом в кэше, если ключ не найден в кэше.
* [[yii\caching\Cache::mget()|mget()]]: извлекает несколько элементов данных из кэша с заданными ключами.
* [[yii\caching\Cache::mset()|mset()]]: хранит множество элементов данных в кэше. Каждый элемент идентифицируется ключом.
* [[yii\caching\Cache::madd()|madd()]]: хранит множество элементов данных в кэше. Каждый элемент идентифицируется ключом.
Если ключ уже существует в кэше, элемент данных будет пропущен.
* [[yii\caching\Cache::exists()|exists()]]: возвращает значение, указывающее, является ли указанный ключ найденным в кэше.
* [[yii\caching\Cache::delete()|delete()]]: удаляет элемент данных, определенных с помощью ключа из кэша.
* [[yii\caching\Cache::flush()|flush()]]: удаляет все элементы данных из кэша.
* [[yii\caching\Cache::get()|get()]]: возвращает данные по указанному ключу. Значение `false`
будет возвращено, если данные не найдены или устарели.
* [[yii\caching\Cache::set()|set()]]: сохраняет данные по ключу.
* [[yii\caching\Cache::add()|add()]]: сохраняет данные по ключу если такого ключа ещё нет.
* [[yii\caching\Cache::mget()|mget()]]: извлекает сразу несколько элементов данных из кэша по заданным ключам.
* [[yii\caching\Cache::mset()|mset()]]: сохраняет несколько элементов данных. Каждый элемент идентифицируется ключом.
* [[yii\caching\Cache::madd()|madd()]]: сохраняет несколько элементов данных. Каждый элемент идентифицируется ключом.
Если ключ уже существует, сохранение не происходит.
* [[yii\caching\Cache::exists()|exists()]]: есть ли указанный ключ в кэше.
* [[yii\caching\Cache::delete()|delete()]]: удаляет указанный ключ.
* [[yii\caching\Cache::flush()|flush()]]: удаляет все данные.
> Примечание: Не кэшируйте непосредственно значение `false`, потому что [[yii\caching\Cache::get()|get()]] использует метод
`false` как возвращаемое значение, чтобы указать, на то, что данные не найдены в кэше. Вы можете обернуть false` в `массив` и закэшировать этот массив, чтобы избежать данной проблемы.
> Примечание: Не кэшируйте непосредственно значение `false`, потому что [[yii\caching\Cache::get()|get()]] использует
`false` для случая, когда данные не найдены в кэше. Вы можете обернуть `false` в массив и закэшировать его, чтобы
избежать данной проблемы.
Некоторые кэш-хранилища, например, MemCache или APC, поддерживают загрузку нескольких кэшированных значений в пакетном режиме,
что может уменьшить накладные расходы на получение кэшированных данных. API-интерфейсы [[yii\caching\Cache::mget()|mget()]]
и [[yii\caching\Cache::madd()|madd()]] используют эту особенность. В случае, если кэш-хранилище
не поддерживает эту функцию, то она будет имитироваться.
Некоторые кэш-хранилища, например, MemCache или APC, поддерживают получение нескольких значений в пакетном режиме,
что может сократить накладные расходы на получение данных. Данную возможность можно использовать при помощи
[[yii\caching\Cache::mget()|mget()]] и [[yii\caching\Cache::madd()|madd()]]. В случае, если хранилище не поддерживает
эту функцию, она будет имитироваться.
Потому что [[yii\caching\Cache]] принадлежащий Аррей Акссесу как компонент может использоваться как массив. Ниже приведены некоторые примеры:
Так как [[yii\caching\Cache]] реализует `ArrayAccess`, компонент кеша можно испльзовать как массив:
```php
$cache['var1'] = $value1; // эквивалентно: $cache->set('var1', $value1);
......@@ -128,32 +139,34 @@ $value2 = $cache['var2']; // эквивалентно: $value2 = $cache->get('v
### Ключи кэша <a name="cache-keys"></a>
Каждый элемент данных хранящийся в кэше идентифицируется ключом. Когда вы сохраняете элемент данных в кэше, Вы должны указать для него ключ. Позже, когда вы извлекаете элемент данных из кэша, вы должны предоставить соответствующий ключ.
Каждый элемент данных, хранящийся в кэше, идентифицируется ключом. Когда вы сохраняете элемент данных в кэше, необходимо
указать для него ключ. Позже, когда вы извлекаете элемент данных из кэша, вы должны предоставить соответствующий ключ.
Вы можете использовать строку или произвольное значение в качестве ключа кэша. Если ключ не строка, то она будет автоматически собираться по частям в строку.
Вы можете использовать строку или произвольное значение в качестве ключа кэша. Если ключ не строка, то он будет
автоматически сериализован в строку.
Общая стратегия определения кэш ключей нужна чтобы включить все определяющие факторы с точки зрения массива.
Например, [[yii\db\Schema]] использует следующие символы информации кэш схемы о таблице базы данных:
Обычно ключ задаётся массивом всех значимых частей. Например, для хранении информации о таблице в [[yii\db\Schema]]
для ключа используются следующие части:
```php
[
__CLASS__, // название класса схемы
$this->db->dsn, // Данные подключения, базы данных
$this->db->username, // Данные подключения, логин пользователя
$name, // название таблицы
__CLASS__, // Название класса схемы.
$this->db->dsn, // Данные для соединения с базой.
$this->db->username, // Логин для соединения с базой.
$name, // Название таблицы.
];
```
Как вы можете видеть, ключ включает в себя все необходимое, чтобы однозначно указать таблицу базы данных необходимую информацию.
Как вы можете видеть, ключ строится так, чтобы однозначно идентифицировать данные таблицы.
Когда это же кэш-хранилище используется различными приложениями, вы должны указать ключевой префикс уникальным кэшем для каждого приложения, чтобы избежать конфликтов ключей кэша. Это может быть сделано путем настройки
[[yii\caching\Cache::keyPrefix]] свойств. Например, в конфигурации приложения вы можете написать следующий код:
Если одно хранилище кэша используется несколькими приложениями, во избежание конфликтов стоит указать префикс ключа.
Сделать это можно путём настройки [[yii\caching\Cache::keyPrefix]]:
```php
'components' => [
'cache' => [
'class' => 'yii\caching\ApcCache',
'keyPrefix' => 'myapp', // уникальная приставка ключей кеша
'keyPrefix' => 'myapp', // уникальный префикс ключей кэша
],
],
```
......@@ -163,7 +176,11 @@ $value2 = $cache['var2']; // эквивалентно: $value2 = $cache->get('v
### Срок действия кэша <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
......@@ -174,26 +191,30 @@ sleep(50);
$data = $cache->get($key);
if ($data === false) {
// $data срок действия истек или не найден в кэше
// срок действия истек или ключ не найден в кэше
}
```
### Зависимости кэша <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
// Создать зависимость от времени модификации файла example.txt.
$dependency = new \yii\caching\FileDependency(['fileName' => 'example.txt']);
// Данные истекают через 30 секунд.
// Данные могут стать недействительными и раньше, если example.txt будет изменен.
// Данные устаревеют через 30 секунд.
// Данные могут устареть и раньше, если example.txt будет изменён.
$cache->set($key, $data, 30, $dependency);
// Кэш будет проверен, если данные истекли.
// Кэш будет проверен, если данные устарели.
// Он также будет проверен, если указанная зависимость была изменена.
// Вернется false, если какое-либо из этих условий выполнено.
$data = $cache->get($key);
......@@ -202,53 +223,56 @@ $data = $cache->get($key);
Ниже приведен список доступных зависимостей кэша:
- [[yii\caching\ChainedDependency]]: зависимость меняется, если любая зависимость в цепочке изменяется.
- [[yii\caching\DbDependency]]: зависимость меняется, если результат некоторого определенного SQL запроса изменен.
- [[yii\caching\ExpressionDependency]]: зависимость меняется, если результат определенного PHP выражения изменен.
- [[yii\caching\DbDependency]]: зависимость меняется, если результат некоторого определенного SQL запроса изменён.
- [[yii\caching\ExpressionDependency]]: зависимость меняется, если результат определенного PHP выражения изменён.
- [[yii\caching\FileDependency]]: зависимость меняется, если изменилось время последней модификации файла.
- [[yii\caching\TagDependency]]: Связывает кэшированные данные элемента с одним или несколькими тегами. Вы можете аннулировать кэширование данных элементов с заданным тегом(тегами) по вызову. [[yii\caching\TagDependency::invalidate()]].
- [[yii\caching\TagDependency]]: Связывает кэшированные данные элемента с одним или несколькими тегами. Вы можете
аннулировать кэширование данных элементов с заданным тегом(тегами) по вызову. [[yii\caching\TagDependency::invalidate()]].
## Кэширование запросов <a name="query-caching"></a>
Кэширование запросов - это специальная функция кэширования построеная на вершине данных кеширования.
Она предназначена для кеширования результатов запросов к базе данных.
Кэширование запросов - это специальная функция кэширования, построеная на основе кэширования данных.
Она предназначена для кэширования результатов запросов к базе данных.
Кеширование запросов требует [[yii\db\Connection|DB connection]] и действительный `Кэш компонент` приложения. Простое использование
Кэширование запросов требует [[yii\db\Connection|DB connection]] и приложения действительный `cache`. Простое использование
запросов кэширования происходит следующим образом, предпологая что `$db` это экземпляр [[yii\db\Connection]]:
```php
$result = $db->cache(function ($db) {
// Результат SQL запроса будет возвращен из кэша
// Если кэширование запросов включено и результат запроса присутствует в кэше
// Результат SQL запроса будет возвращен из кэша если
// кэширование запросов включено и результат запроса присутствует в кэше
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>
Кэширование запросов имеет три глобальных конфигурационных параметра через [[yii\db\Connection]]:
* [[yii\db\Connection::enableQueryCache|enableQueryCache]]: whether to turn on or off query caching.
It defaults to true. Note that to effectively turn on query caching, you also need to have a valid
cache, as specified by [[yii\db\Connection::queryCache|queryCache]].
* [[yii\db\Connection::queryCacheDuration|queryCacheDuration]]: this represents the number of seconds
that a query result can remain valid in the cache. You can use 0 to indicate a query result should
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]]: 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.
* [[yii\db\Connection::enableQueryCache|enableQueryCache]]: включить или выключить кэширование запросовю.
По умолчанию `true`. Стоит отметить, что для использования кэширования вам может понадобиться компонент
cache, как показано в [[yii\db\Connection::queryCache|queryCache]].
* [[yii\db\Connection::queryCacheDuration|queryCacheDuration]]: количество секунд, в течение которых результат кэшируется.
Для бесконечного кэша используйте `0`. Именно это значение выставляется [[yii\db\Connection::cache()]] если не указать
время явно.
* [[yii\db\Connection::queryCache|queryCache]]: ID компонента кэширования. По умолчанию `'cache'`. Кэширования запросов
работает только если используется компонент приложения кэш.
### Использование <a name="query-caching-usages"></a>
Вы можете использовать [[yii\db\Connection::cache()]], если у вас есть несколько SQL запросов, которые необходимо закэшировать. Использование выглядит следующим образом:
Вы можете использовать [[yii\db\Connection::cache()]], если у вас есть несколько SQL запросов, которые необходимо
закэшировать:
```php
$duration = 60; // кэширование результата на 60 секунд
......@@ -264,10 +288,11 @@ $result = $db->cache(function ($db) {
```
Любые 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
$result = $db->cache(function ($db) {
......@@ -286,7 +311,8 @@ $result = $db->cache(function ($db) {
});
```
Если вы просто хотите использовать кэширование для одного запроса, вы можете вызвать [[yii\db\Command::cache()]] при построении конманды. Например:
Если вы просто хотите использовать кэширование для одного запроса, вы можете вызвать [[yii\db\Command::cache()]] при
построении конманды. Например:
```php
// использовать кэширование запросов и установить срок действия кэша на 60 секунд
......@@ -312,7 +338,8 @@ $result = $db->cache(function ($db) {
### Ограничения <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