Merge pull request #9020 from HawkingEtha/cashing-data-fix

[RU] translation editing - cashing data [skip ci]
This commit is contained in:
Alexander Makarov
2015-07-06 13:35:23 +03:00

View File

@ -1,8 +1,7 @@
Кэширование данных Кэширование данных
================== ==================
Кэширование данных заключается в сохранении некоторой переменной PHP в кэше и последующее её извлечение. Оно является Кэширование данных заключается в сохранении некоторой переменной PHP в кэше и её последующем извлечении. Оно является основой для расширенных возможностей, таких как [кэширование запросов](#query-caching)
основой для расширенных возможностей, таких как [кэширование запросов](#query-caching)
и [кэширование страниц](caching-page.md). и [кэширование страниц](caching-page.md).
Приведённый ниже код является типичным случаем кэширования данных, где `$cache` указывает на [компонент кэширования](#cache-components): Приведённый ниже код является типичным случаем кэширования данных, где `$cache` указывает на [компонент кэширования](#cache-components):
@ -25,12 +24,9 @@ if ($data === false) {
## Компоненты кэширования <span id="cache-components"></span> ## Компоненты кэширования <span id="cache-components"></span>
Кэширование данных опирается на *компоненты кэширования*, которые представляют различные хранилища, такие как память, Кэширование данных опирается на *компоненты кэширования*, которые представляют различные хранилища, такие как память, файлы и базы данных.
файлы и базы данных.
Кэш-компоненты, как правило, зарегистрированы в качестве [компонентов приложения](structure-application-components.md), так Кэш-компоненты, как правило, зарегистрированы в качестве [компонентов приложения](structure-application-components.md), так что их можно настраивать и обращаться к ним глобально. Следующий код показывает, как настроить компонент приложения `cache` для использования [Memcached](http://memcached.org/) с двумя серверами:
что их можно настраивать и обращаться к ним глобально. Следующий код показывает, как настроить компонент приложения `cache`
для использования [Memcached](http://memcached.org/) с двумя серверами:
```php ```php
'components' => [ 'components' => [
@ -54,9 +50,7 @@ if ($data === false) {
Вы можете получить доступ к компоненту кэша, используя выражение `Yii::$app->cache`. Вы можете получить доступ к компоненту кэша, используя выражение `Yii::$app->cache`.
Поскольку все компоненты кэша поддерживают единый API-интерфейс, вы можете менять основной компонент кэша на другой Поскольку все компоненты кэша поддерживают единый API-интерфейс - вы можете менять основной компонент кэша на другой через конфигурацию приложения. Код, использующий кэш, при этом не меняется. Например, можно изменить конфигурацию выше для использования [[yii\caching\ApcCache|APC cache]] следующим образом:
через конфигурацию приложения. Код, использующий кэш, при этом не меняется. Например, конфигурацию выше для использования
[[yii\caching\ApcCache|APC cache]] можно изменить следующим образом:
```php ```php
@ -67,69 +61,44 @@ if ($data === false) {
], ],
``` ```
> Совет: Вы можете зарегистрировать несколько кэш-компонентов приложения. Компонент с именем `cache` используется > Совет: Вы можете зарегистрировать несколько кэш-компонентов приложения. Компонент с именем `cache` используется по умолчанию многими классами (например, [[yii\web\UrlManager]]).
по умолчанию многими классами (например, [[yii\web\UrlManager]]).
### Поддерживаемые хранилища <span id="supported-cache-storage"></span> ### Поддерживаемые хранилища <span id="supported-cache-storage"></span>
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::$app->cache->get($key)`. При этом можно не беспокоиться, что `Yii::$app->cache` может быть `null`;
* [[yii\caching\DbCache]]: использует таблицу базы данных для хранения кэшированных данных. Чтобы использовать этот кэш, * [[yii\caching\FileCache]]: использует обычные файлы для хранения кэшированных данных. Замечательно подходит для кэширования больших кусков данных, таких как содержимое страницы;
вы должны создать таблицу, как описано в [[yii\caching\DbCache::cacheTable]]. * [[yii\caching\MemCache]]: использует расширения PHP [memcache](http://php.net/manual/en/book.memcache.php) и [memcached](http://php.net/manual/en/book.memcached.php). Этот вариант может рассматриваться как самый быстрый при работе в распределенных приложениях (например, с несколькими серверами, балансировкой нагрузки и так далее);
* [[yii\caching\DummyCache]]: является кэшем-пустышкой, не реализующим реального кэширования. Смысл этого компонента в * [[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::$app->cache->get($key)`. При этом можно не беспокоиться, что `Yii::$app->cache` * [[yii\caching\ZendDataCache]]: использует [Zend Data Cache](http://files.zend.com/help/Zend-Server-6/zend-server.htm#data_cache_component.htm).
может быть `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).
> Совет: Вы можете использовать разные способы хранения кэша в одном приложении. Общая стратегия заключается в использовании памяти под хранение небольших часто используемых данных (например, статистические данные). Для больших и реже используемых данных (например, содержимое страницы) лучше использовать файлы или базу данных.
> Совет: Вы можете использовать разные способы хранения кэша в одном приложении. Общая стратегия заключается в использовании
памяти под хранение небольших часто используемых данных (например, статистические данные). Для больших и реже используемых
данных (например, содержимое страницы) лучше использовать файлы или базу данных.
## Кэш 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::delete()|delete()]]: удаляет указанный ключ;
* [[yii\caching\Cache::exists()|exists()]]: есть ли указанный ключ в кэше.
* [[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, поддерживают получение нескольких значений в пакетном режиме, что может сократить накладные расходы на получение данных. Данную возможность возможно использовать при помощи [[yii\caching\Cache::mget()|mget()]] и [[yii\caching\Cache::madd()|madd()]]. В случае, если хранилище не поддерживает эту функцию, она будет имитироваться.
что может сократить накладные расходы на получение данных. Данную возможность можно использовать при помощи
[[yii\caching\Cache::mget()|mget()]] и [[yii\caching\Cache::madd()|madd()]]. В случае, если хранилище не поддерживает
эту функцию, она будет имитироваться.
Так как [[yii\caching\Cache]] реализует `ArrayAccess`, компонент кэша можно использовать как массив: Так как [[yii\caching\Cache]] реализует `ArrayAccess` - следовательно компонент кэша можно использовать как массив:
```php ```php
$cache['var1'] = $value1; // эквивалентно: $cache->set('var1', $value1); $cache['var1'] = $value1; // эквивалентно: $cache->set('var1', $value1);
@ -139,14 +108,11 @@ $value2 = $cache['var2']; // эквивалентно: $value2 = $cache->get('v
### Ключи кэша <span id="cache-keys"></span> ### Ключи кэша <span id="cache-keys"></span>
Каждый элемент данных, хранящийся в кэше, идентифицируется ключом. Когда вы сохраняете элемент данных в кэше, необходимо Каждый элемент данных, хранящийся в кэше, идентифицируется ключом. Когда вы сохраняете элемент данных в кэше, необходимо указать для него ключ. Позже, когда вы извлекаете элемент данных из кэша, вы также должны предоставить соответствующий ключ.
указать для него ключ. Позже, когда вы извлекаете элемент данных из кэша, вы должны предоставить соответствующий ключ.
Вы можете использовать строку или произвольное значение в качестве ключа кэша. Если ключ не строка, то он будет Вы можете использовать строку или произвольное значение в качестве ключа кэша. Если ключ не строка, то он будет автоматически сериализован в строку.
автоматически сериализован в строку.
Обычно ключ задаётся массивом всех значимых частей. Например, для хранения информации о таблице в [[yii\db\Schema]] Обычно ключ задаётся массивом всех значимых частей. Например, для хранения информации о таблице в [[yii\db\Schema]] используются следующие части для ключа:
для ключа используются следующие части:
```php ```php
[ [
@ -159,8 +125,7 @@ $value2 = $cache['var2']; // эквивалентно: $value2 = $cache->get('v
Как вы можете видеть, ключ строится так, чтобы однозначно идентифицировать данные таблицы. Как вы можете видеть, ключ строится так, чтобы однозначно идентифицировать данные таблицы.
Если одно хранилище кэша используется несколькими приложениями, во избежание конфликтов стоит указать префикс ключа. Если одно хранилище кэша используется несколькими приложениями, стоит указать префикс ключа во избежание конфликтов. Сделать это можно путём настройки [[yii\caching\Cache::keyPrefix]]:
Сделать это можно путём настройки [[yii\caching\Cache::keyPrefix]]:
```php ```php
'components' => [ 'components' => [
@ -173,15 +138,9 @@ $value2 = $cache['var2']; // эквивалентно: $value2 = $cache->get('v
Для обеспечения совместимости должны быть использованы только алфавитно-цифровые символы. Для обеспечения совместимости должны быть использованы только алфавитно-цифровые символы.
### Срок действия кэша <span id="cache-expiration"></span> ### Срок действия кэша <span id="cache-expiration"></span>
Элементы данных, хранимые в кэше, остаются там навсегда если только они не будут удалены из-за особенностей Элементы данных, хранимые в кэше, остаются там навсегда и могут быть удалены только из-за особенностей функционирования хранилища (например, место для кэширования заполнено и старые данные удаляются). Чтобы изменить этот режим, вы можете передать истечение срока действия ключа при вызове метода [[yii\caching\Cache::set()|set()]]. Параметр указывает на то, сколько секунд элемент кэша может считаться актуальным. Если срок годности ключа истёк, [[yii\caching\Cache::get()|get()]] вернёт `false`:
функционирования хранилища (например, место для кэширования заполнено и старые данные удаляются). Чтобы изменить этот
режим, вы можете передать истечение срока действия ключа при вызове метода [[yii\caching\Cache::set()|set()]].
Параметр указывает, сколько секунд элемент кэша может считаться актуальным. Если срок годности ключа истёк,
[[yii\caching\Cache::get()|get()]] вернёт `false`:
```php ```php
// Хранить данные в кэше не более 45 секунд // Хранить данные в кэше не более 45 секунд
@ -195,16 +154,13 @@ if ($data === false) {
} }
``` ```
### Зависимости кэша <span id="cache-dependencies"></span> ### Зависимости кэша <span id="cache-dependencies"></span>
В добавок к изменению срока действия ключа, элемент может быть признан недействительным из-за *изменения зависимостей*. В добавок к изменению срока действия ключа элемент может быть признан недействительным из-за *изменения зависимостей*. К примеру, [[yii\caching\FileDependency]] представляет собой зависимость от времени изменения файла. Когда это время изменяется, любые устаревшие данные, найденные в кэше, должны быть признаны недействительным, а [[yii\caching\Cache::get()|get()]] в этом случае должен вернуть `false`.
К примеру, [[yii\caching\FileDependency]] представляет собой зависимость от времени изменения файла. Когда это время
изменяется, и файл. Любые устаревшие данные, найденные в кэше должны быть признаны недействительным, а
[[yii\caching\Cache::get()|get()]] в этом случае должен вернуть `false`.
Зависимости кэша представлены в виде объектов потомков класса [[yii\caching\Dependency]]. Когда вы вызываете метод Зависимости кэша представлены в виде объектов потомков класса [[yii\caching\Dependency]]. Когда вы вызываете [[yii\caching\Cache::set()|set()]] метод, чтобы сохранить элемент данных в кэше, вы можете передать туда зависимость.
[[yii\caching\Cache::set()|set()]], чтобы сохранить элемент данных в кэше, вы можете передать туда зависимость. Например:
Например:
```php ```php
// Создать зависимость от времени модификации файла example.txt. // Создать зависимость от времени модификации файла example.txt.
@ -222,21 +178,18 @@ $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]]: Связывает кэшированные данные элемента с одним или несколькими тегами. Вы можете аннулировать кэширование данных элементов с заданным тегом(тегами) по вызову. [[yii\caching\TagDependency::invalidate()]];
аннулировать кэширование данных элементов с заданным тегом(тегами) по вызову. [[yii\caching\TagDependency::invalidate()]].
## Кэширование запросов <span id="query-caching"></span> ## Кэширование запросов <span id="query-caching"></span>
Кэширование запросов - это специальная функция кэширования, построенная на основе кэширования данных. Кэширование запросов - это специальная функция, построенная на основе кэширования данных.
Она предназначена для кэширования результатов запросов к базе данных. Она предназначена для кэширования результатов запросов к базе данных.
Кэширование запросов требует [[yii\db\Connection|DB connection]] и приложения действительный `cache`. Простое использование Кэширование запросов требует [[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) {
@ -256,29 +209,20 @@ $result = Customer::getDb()->cache(function ($db) {
}); });
``` ```
> Информация: Некоторые СУБД (например, [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)) поддерживают кэширование запросов любого механизма на стороне сервера БД. КЗ описано разделом выше. Оно имеет безусловное преимущество, поскольку, благодаря ему, можно указать гибкие зависимости кэша и это более эффективно.
кэширование запросов на стороне сервера БД. Вы можете использовать любой механизм кэширования запросов. Кэширование
запросов описанное выше, имеет преимущество, поскольку можно указать гибкие зависимости кэша и это более эффективно.
### Конфигурации <span id="query-caching-configs"></span> ### Конфигурации <span id="query-caching-configs"></span>
Кэширование запросов имеет три глобальных конфигурационных параметра через [[yii\db\Connection]]: Кэширование запросов имеет три глобальных конфигурационных параметра через [[yii\db\Connection]]:
* [[yii\db\Connection::enableQueryCache|enableQueryCache]]: включить или выключить кэширование запросов. * [[yii\db\Connection::enableQueryCache|enableQueryCache]]: включить или выключить кэширование запросов; По умолчанию `true`. Стоит отметить, что для использования кэширования вам может понадобиться компонент cache, как показано в [[yii\db\Connection::queryCache|queryCache]];
По умолчанию `true`. Стоит отметить, что для использования кэширования вам может понадобиться компонент * [[yii\db\Connection::queryCacheDuration|queryCacheDuration]]: количество секунд кэширования результата. Для бесконечного кэша используйте `0`. Именно это значение выставляется [[yii\db\Connection::cache()]], если не указать время явно;
cache, как показано в [[yii\db\Connection::queryCache|queryCache]]. * [[yii\db\Connection::queryCache|queryCache]]: ID компонента кэширования. По умолчанию `'cache'`. Кэширования запросов работает только в том случае, если используется компонент приложения кэш.
* [[yii\db\Connection::queryCacheDuration|queryCacheDuration]]: количество секунд, в течение которых результат кэшируется.
Для бесконечного кэша используйте `0`. Именно это значение выставляется [[yii\db\Connection::cache()]] если не указать
время явно.
* [[yii\db\Connection::queryCache|queryCache]]: ID компонента кэширования. По умолчанию `'cache'`. Кэширования запросов
работает только если используется компонент приложения кэш.
### Использование <span id="query-caching-usages"></span> ### Использование <span id="query-caching-usages"></span>
Вы можете использовать [[yii\db\Connection::cache()]], если у вас есть несколько SQL запросов, которые необходимо Вы можете использовать [[yii\db\Connection::cache()]], если у вас есть несколько SQL запросов, которые необходимо закэшировать:
закэшировать:
```php ```php
$duration = 60; // кэширование результата на 60 секунд $duration = 60; // кэширование результата на 60 секунд
@ -293,12 +237,9 @@ $result = $db->cache(function ($db) {
}, $duration, $dependency); }, $duration, $dependency);
``` ```
Любые SQL запросы в анонимной функции будут кэшироваться в течении указанного промежутка времени с заданной зависимостью. Любые SQL запросы в анонимной функции будут кэшироваться в течении указанного промежутка времени с заданной зависимостью. Если результат в кэше актуален - запрос будет пропущен и, вместо этого, из кэша будет возвращен результат. Если вы не укажете `'$duration'`, то значение [[yii\db\Connection::queryCacheDuration|queryCacheDuration]] будет использоваться вместо него.
Если результат в кэше актуален, запрос будет пропущен и, вместо этого, из кэша будет возвращен результат. Если вы не
укажете `'$duration'`, значение [[yii\db\Connection::queryCacheDuration|queryCacheDuration]] будет использоваться вместо него.
Иногда в пределах `"cache()"` вы можете отключить кэширование запроса. В этом случае вы можете использовать Иногда в пределах `"cache()"` вы можете отключить кэширование запроса. В этом случае вы можете использовать [[yii\db\Connection::noCache()]].
[[yii\db\Connection::noCache()]].
```php ```php
$result = $db->cache(function ($db) { $result = $db->cache(function ($db) {
@ -317,15 +258,14 @@ $result = $db->cache(function ($db) {
}); });
``` ```
Если вы просто хотите использовать кэширование для одного запроса, вы можете вызвать [[yii\db\Command::cache()]] при Если вы просто хотите использовать кэширование для одного запроса, вы можете вызвать [[yii\db\Command::cache()]] при построении команды. Например:
построении команды. Например:
```php ```php
// использовать кэширование запросов и установить срок действия кэша на 60 секунд // использовать кэширование запросов и установить срок действия кэша на 60 секунд
$customer = $db->createCommand('SELECT * FROM customer WHERE id=1')->cache(60)->queryOne(); $customer = $db->createCommand('SELECT * FROM customer WHERE id=1')->cache(60)->queryOne();
``` ```
Вы также можете использовать [[yii\db\Command::noCache()]], чтобы отключить кэширование запросов для одной команды. Например: Вы также можете использовать [[yii\db\Command::noCache()]] для отключения кэширования запросов для одной команды. Например:
```php ```php
$result = $db->cache(function ($db) { $result = $db->cache(function ($db) {
@ -344,8 +284,6 @@ $result = $db->cache(function ($db) {
### Ограничения <span id="query-caching-limitations"></span> ### Ограничения <span id="query-caching-limitations"></span>
Кэширование запросов не работает с результатами запросов, которые содержат обработчики ресурсов. Например, при использовании Кэширование запросов не работает с результатами запросов, которые содержат обработчики ресурсов. Например, при использовании типа столбца `BLOB` в некоторых СУБД, в качестве результата запроса будет выведен ресурс обработчик данных столбца.
типа столбца `BLOB` в некоторых СУБД, в качестве результата запроса будет выведен ресурс обработчик данных столбца.
Некоторые кэш хранилища имеют ограничение в размере данных. Например, Memcache ограничивает максимальный размер каждой Некоторые кэш хранилища имеют ограничение в размере данных. Например, Memcache ограничивает максимальный размер каждой записи до 1 Мб. Таким образом, если результат запроса превышает этот предел, данные не будут закешированы.
записи до 1 Мб. Таким образом, если результат запроса превышает этот предел, данные не будут закешированы.