Yii2 очистить кэш вручную
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Open with Desktop
- View raw
- Copy raw contents Copy raw contents
Copy raw contents
Copy raw contents
Кэширование данных заключается в сохранении некоторой переменной PHP в кэше и её последующем извлечении. Оно является основой для расширенных возможностей, таких как кэширование запросов и кэширование страниц.
Приведённый ниже код является типичным случаем кэширования данных, где $cache указывает на компонент кэширования:
Начиная с версии 2.0.11, компонент кэширования предоставляет метод [[yii\caching\Cache::getOrSet()|getOrSet()]], который упрощает код при получении, вычислении и сохранении данных. Приведённый ниже код делает в точности то же самое, что и код в предыдущем примере:
Если в кэше есть данные по ключу $key , они будут сразу возвращены. Иначе, будет вызвана переданная анонимная функция, вычисляющая значение, которое будет сохранено в кэш и возвращено из метода.
В случае, когда анонимной функции требуются данные из внешней области видимости, можно передать их с помощью оператора use . Например:
Note: В [[yii\caching\Cache::getOrSet()|getOrSet()]] можно передать срок действия и зависимости кэша. Прочтите Срок действия кэша и Зависимости кеша чтобы узнать больше.
Кэширование данных опирается на компоненты кэширования, которые представляют различные хранилища, такие как память, файлы и базы данных.
Вы можете получить доступ к компоненту кэша, используя выражение Yii::$app->cache .
Поскольку все компоненты кэша поддерживают единый API-интерфейс - вы можете менять основной компонент кэша на другой через конфигурацию приложения. Код, использующий кэш, при этом не меняется. Например, можно изменить конфигурацию выше для использования [[yii\caching\ApcCache|APC cache]] следующим образом:
Tip: Вы можете зарегистрировать несколько кэш-компонентов приложения. Компонент с именем cache используется по умолчанию многими классами (например, [[yii\web\UrlManager]]).
Yii поддерживает множество хранилищ кэша:
- [[yii\caching\ApcCache]]: использует расширение PHP APC. Эта опция считается самой быстрой при работе с кэшем в «толстом» централизованном приложении (т.е. один сервер, без выделенного балансировщика нагрузки и т.д.);
- [[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 и memcached. Этот вариант может рассматриваться как самый быстрый при работе в распределенных приложениях (например, с несколькими серверами, балансировкой нагрузки и так далее);
- [[yii\redis\Cache]]: реализует компонент кэша на основе Redis, хранилища ключ-значение (требуется Redis версии 2.6.12 или выше);
- [[yii\caching\WinCache]]: использует расширение PHP WinCache (смотрите также);
- [[yii\caching\XCache]] (deprecated): использует расширение PHP XCache;
- [[yii\caching\ZendDataCache]] (deprecated): использует Zend Data Cache.
Tip: Вы можете использовать разные способы хранения кэша в одном приложении. Общая стратегия заключается в использовании памяти под хранение небольших часто используемых данных (например, статистические данные). Для больших и реже используемых данных (например, содержимое страницы) лучше использовать файлы или базу данных.
У всех компонентов кэша имеется один базовый класс [[yii\caching\Cache]] со следующими методами:
- [[yii\caching\Cache::get()|get()]]: возвращает данные по указанному ключу. Если данные не найдены или устарели, то значение false будет возвращено;
- [[yii\caching\Cache::set()|set()]]: сохраняет данные по ключу;
- [[yii\caching\Cache::add()|add()]]: сохраняет данные по ключу если такого ключа ещё нет;
- [[yii\caching\Cache::getOrSet()|getOrSet()]]: возвращает данные по указанному ключу или выполняет переданную анонимную функцию для вычисления значения, а полученные данные сохраняет в кэш и возвращает;
- [[yii\caching\Cache::multiGet()|multiGet()]]: извлекает сразу несколько элементов данных из кэша по заданным ключам;
- [[yii\caching\Cache::multiSet()|multiSet()]]: сохраняет несколько элементов данных. Каждый элемент идентифицируется ключом;
- [[yii\caching\Cache::multiAdd()|multiAdd()]]: сохраняет несколько элементов данных. Каждый элемент идентифицируется ключом. Если ключ уже существует, то сохранения не происходит;
- [[yii\caching\Cache::exists()|exists()]]: есть ли указанный ключ в кэше;
- [[yii\caching\Cache::delete()|delete()]]: удаляет указанный ключ;
- [[yii\caching\Cache::flush()|flush()]]: удаляет все данные.
Note: Не кэшируйте непосредственно значение false , потому что [[yii\caching\Cache::get()|get()]] использует false для случая, когда данные не найдены в кэше. Вы можете обернуть false в массив и закэшировать его, чтобы избежать данной проблемы.
Некоторые кэш-хранилища, например, MemCache или APC, поддерживают получение нескольких значений в пакетном режиме, что может сократить накладные расходы на получение данных. Данную возможность возможно использовать при помощи [[yii\caching\Cache::multiGet()|multiGet()]] и [[yii\caching\Cache::multiAdd()|multiAdd()]]. В случае, если хранилище не поддерживает эту функцию, она будет имитироваться.
Так как [[yii\caching\Cache]] реализует ArrayAccess - следовательно компонент кэша можно использовать как массив:
Каждый элемент данных, хранящийся в кэше, идентифицируется ключом. Когда вы сохраняете элемент данных в кэше, необходимо указать для него ключ. Позже, когда вы извлекаете элемент данных из кэша, вы также должны предоставить соответствующий ключ.
Вы можете использовать строку или произвольное значение в качестве ключа кэша. Если ключ не строка, то он будет автоматически сериализован в строку.
Обычно ключ задаётся массивом всех значимых частей. Например, для хранения информации о таблице в [[yii\db\Schema]] используются следующие части для ключа:
Как вы можете видеть, ключ строится так, чтобы однозначно идентифицировать данные таблицы.
Если одно хранилище кэша используется несколькими приложениями, стоит указать префикс ключа во избежание конфликтов. Сделать это можно путём настройки [[yii\caching\Cache::keyPrefix]]:
Для обеспечения совместимости должны быть использованы только алфавитно-цифровые символы.
Срок действия кэша
Элементы данных, хранимые в кэше, остаются там навсегда и могут быть удалены только из-за особенностей функционирования хранилища (например, место для кэширования заполнено и старые данные удаляются). Чтобы изменить этот режим, вы можете передать истечение срока действия ключа при вызове метода [[yii\caching\Cache::set()|set()]]. Параметр указывает на то, сколько секунд элемент кэша может считаться актуальным. Если срок годности ключа истёк, [[yii\caching\Cache::get()|get()]] вернёт false :
Начиная с версии 2.0.11 вы можете изменить значение по умолчанию (бесконечность) для длительности кэширования задав [[yii\caching\Cache::$defaultDuration|defaultDuration]] в конфигурации компонента кэша. Таким образом, можно будет не передавать значение duration в [[yii\caching\Cache::set()|set()]] каждый раз.
В добавок к изменению срока действия ключа элемент может быть признан недействительным из-за изменения зависимостей. К примеру, [[yii\caching\FileDependency]] представляет собой зависимость от времени изменения файла. Когда это время изменяется, любые устаревшие данные, найденные в кэше, должны быть признаны недействительным, а [[yii\caching\Cache::get()|get()]] в этом случае должен вернуть false .
Зависимости кэша представлены в виде объектов потомков класса [[yii\caching\Dependency]]. Когда вы вызываете [[yii\caching\Cache::set()|set()]] метод, чтобы сохранить элемент данных в кэше, вы можете передать туда зависимость.
Ниже приведен список доступных зависимостей кэша:
- [[yii\caching\ChainedDependency]]: зависимость меняется, если любая зависимость в цепочке изменяется;
- [[yii\caching\DbDependency]]: зависимость меняется, если результат некоторого определенного SQL запроса изменён;
- [[yii\caching\ExpressionDependency]]: зависимость меняется, если результат определенного PHP выражения изменён;
- [[yii\caching\FileDependency]]: зависимость меняется, если изменилось время последней модификации файла;
- [[yii\caching\TagDependency]]: Связывает кэшированные данные элемента с одним или несколькими тегами. Вы можете аннулировать кэширование данных элементов с заданным тегом(тегами) по вызову. [[yii\caching\TagDependency::invalidate()]];
Кэширование запросов - это специальная функция, построенная на основе кэширования данных. Она предназначена для кэширования результатов запросов к базе данных.
Кэширование запросов требует [[yii\db\Connection|DB connection]] действительный cache компонента приложения. Предпологая, что $db это [[yii\db\Connection]] экземпляр, простое использование запросов кэширования происходит следующим образом:
Кэширование запросов может быть использовано как для DAO, так и для ActiveRecord:
Info: Некоторые СУБД (например, MySQL) поддерживают кэширование запросов любого механизма на стороне сервера БД. КЗ описано разделом выше. Оно имеет безусловное преимущество, поскольку, благодаря ему, можно указать гибкие зависимости кэша и это более эффективно.
Для очистки всего кэша, вы можете вызвать [[yii\caching\Cache::flush()]].
Также вы можете очистить кэш из консоли, вызвав yii cache/flush .
- yii cache : отображает список доступных кэширующих компонентов приложения
- yii cache/flush cache1 cache2 : очищает кэш в компонентах cache1 , cache2 (можно передать несколько названий компонентов кэширования, разделяя их пробелом)
- yii cache/flush-all : очищает кэш во всех кэширующих компонентах приложения
- yii cache/flush-schema db : очищает кеш схемы базы данных для данного компонента соединения
Info: Консольное приложение использует отдельный конфигурационный файл по умолчанию. Для получения должного результата, убедитесь, что в конфигурациях консольного и веб-приложения у вас одинаковые компоненты кэширования.
Кэширование запросов имеет три глобальных конфигурационных параметра через [[yii\db\Connection]]:
- [[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' . Кэширования запросов работает только в том случае, если используется компонент приложения кэш.
Вы можете использовать [[yii\db\Connection::cache()]], если у вас есть несколько SQL запросов, которые необходимо закэшировать:
Любые SQL запросы в анонимной функции будут кэшироваться в течение указанного промежутка времени и с помощью заданной зависимости. Если результат запроса в кэше актуален, запрос будет пропущен, и вместо этого из кэша будет возвращен результат. Если вы не укажете параметр '$duration' , то значение [[yii\db\Connection::queryCacheDuration|queryCacheDuration]] будет использоваться вместо него.
Иногда в пределах "cache()" вы можете захотеть отключить кэширование запроса. В этом случае вы можете использовать [[yii\db\Connection::noCache()]].
Если вы просто хотите использовать кэширование для одного запроса, вы можете вызвать [[yii\db\Command::cache()]] при построении команды. Например:
Вы также можете использовать [[yii\db\Command::noCache()]] для отключения кэширования запросов для одной команды. Например:
Кэширование запросов не работает с результатами запросов, которые содержат обработчики ресурсов. Например, при использовании столбца типа BLOB в некоторых СУБД, в качестве результата запроса будет возвращен указатель на ресурс для этого столбца данных.
Некоторые кэш хранилища имеют ограничение в размере данных. Например, Memcache ограничивает максимальный размер каждой записи до 1 Мб. Таким образом, если результат запроса превышает этот предел, данные не будут закэшированы.
Существует много факторов, влияющих на производительность веб-приложения. Какие-то относятся к окружению, какие-то к вашему коду, а какие-то к самому Yii. В этом разделе мы перечислим большинство из них и объясним, как можно улучшить производительность приложения, регулируя эти факторы.
Объединение и минимизация ресурсов ¶
Ключи кэша ¶
Каждый элемент данных, хранящийся в кэше, идентифицируется ключом. Когда вы сохраняете элемент данных в кэше, необходимо указать для него ключ. Позже, когда вы извлекаете элемент данных из кэша, вы также должны предоставить соответствующий ключ.
Вы можете использовать строку или произвольное значение в качестве ключа кэша. Если ключ не строка, то он будет автоматически сериализован в строку.
Обычно ключ задаётся массивом всех значимых частей. Например, для хранения информации о таблице в yii\db\Schema используются следующие части для ключа:
Как вы можете видеть, ключ строится так, чтобы однозначно идентифицировать данные таблицы.
Если одно хранилище кэша используется несколькими приложениями, стоит указать префикс ключа во избежание конфликтов. Сделать это можно путём настройки yii\caching\Cache::$keyPrefix:
Для обеспечения совместимости должны быть использованы только алфавитно-цифровые символы.
Оптимизация базы данных ¶
Выполнение запросов к БД и выборки данных часто являются узким местом производительности веб-приложения. Хотя использование техник кэширования данных может смягчить снижение производительности, оно не решает проблему полностью. Когда база данных содержит огромное количество данных, и данные в кэше невалидны, получение свежих данных без правильного проектирования БД и запросов может быть чрезмерно ресурсоемкой операцией.
Общей методикой для повышения производительности запросов к БД является создание индексов для тех столбцов таблицы, по которым делается выборка. Например, если вам нужно найти запись о пользователе по username , вам надо создать индекс на username . Обратите внимание, что в то время как индексирование может сделать SELECT запросы намного быстрее, оно будет замедлять INSERT, UPDATE и DELETE запросы.
Для сложных запросов к БД рекомендуется создавать представления базы данных (views), чтобы сэкономить время подготовки и разбора запросов.
Последнее, хотя и не менее важное: используйте LIMIT в ваших SELECT запросах. Это позволяет избежать извлечения большого количество данных из базы данных и исчерпания памяти, выделенной для PHP.
Limitations ¶
Query caching does not work with query results that contain resource handlers. For example, when using the BLOB column type in some DBMS, the query result will return a resource handler for the column data.
Some caching storage has size limitation. For example, memcache limits the maximum size of each entry to be 1MB. Therefore, if the size of a query result exceeds this limit, the caching will fail.
Оптимизация окружения PHP ¶
Хорошо сконфигурированное окружение PHP очень важно. Для получения максимальной производительности,
- Используйте последнюю стабильную версию PHP. Мажорные релизы PHP могут принести значительные улучшения производительности.
- Включите кеширование байткода в Opcache (PHP 5.5 и старше) или APC (PHP 5.4 и более ранние версии). Кеширование байткода позволяет избежать затрат времени на обработку и подключение PHP скриптов при каждом входящем запросе.
Оптимизация хранилища сессий ¶
По умолчанию данные сессий хранятся в файлах. Это удобно для разработки или в маленьких проектах. Но когда дело доходит до обработки множества параллельных запросов, то лучше использовать более сложные хранилища, такие как базы данных. Yii поддерживает различные хранилища "из коробки". Вы можете использовать эти хранилища, сконфигурировав компонент session в конфигурации приложения как показано ниже,
Приведенная выше конфигурация использует таблицу базы данных для хранения сессионных данных. По умолчанию, используется компонент приложения db для подключения к базе данных и сохранения сессионных данных в таблице session . Вам нужно будет создать таблицу session заранее:
Вы также можете хранить сессионные данные в кеше с помощью yii\web\CacheSession. Теоретически, вы можете использовать любое поддерживаемое хранилище кеша. Тем не менее, помните, что некоторые хранилища кеша могут сбрасывать закешированные данные при достижении лимитов хранилища. По этой причине, вы должны в основном использовать хранилища кеша, которые не имеют таких лимитов.
Если на вашем сервере установлен Redis, настоятельно рекомендуется выбрать его в качестве хранилища сессий используя yii\redis\Session .
Configurations ¶
Query caching has three global configurable options through yii\db\Connection:
-
: 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 queryCache. : 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. : 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.
Supported Cache Storage ¶
Yii supports a wide range of cache storage. The following is a summary:
-
: uses PHP APC extension. This option can be considered as the fastest one when dealing with cache for a centralized thick application (e.g. one server, no dedicated load balancers, etc.). : uses a database table to store cached data. To use this cache, you must create a table as specified in yii\caching\DbCache::$cacheTable. : provides caching for the current request only by storing the values in an array. For enhanced performance of ArrayCache, you can disable serialization of the stored data by setting yii\caching\ArrayCache::$serializer to false . : serves as a cache placeholder which does no real caching. The purpose of this component is to simplify the code that needs to check the availability of cache. For example, during development or if the server doesn't have actual cache support, you may configure a cache component to use this cache. When an actual cache support is enabled, you can switch to use the corresponding cache component. In both cases, you may use the same code Yii::$app->cache->get($key) to attempt retrieving data from the cache without worrying that Yii::$app->cache might be null . : uses standard files to store cached data. This is particularly suitable to cache large chunk of data, such as page content. : uses PHP memcache and memcached extensions. This option can be considered as the fastest one when dealing with cache in a distributed applications (e.g. with several servers, load balancers, etc.)
- yii\redis\Cache : implements a cache component based on Redis key-value store (redis version 2.6.12 or higher is required). : uses PHP WinCache (see also) extension. (deprecated): uses PHP XCache extension. (deprecated): uses Zend Data Cache as the underlying caching medium.
Tip: You may use different cache storage in the same application. A common strategy is to use memory-based cache storage to store data that is small but constantly used (e.g. statistical data), and use file-based or database-based cache storage to store data that is big and less frequently used (e.g. page content).
Использование техник кеширования ¶
Вы можете использовать различные техники кеширования чтобы значительно улучшить производительность вашего приложения. Например, если ваше приложение позволяет пользователям вводить текст в формате Markdown, вы можете закешировать разобранное содержимого Markdown, чтобы избежать разбора одной и той же разметки Markdown неоднократно при каждом запросе. Пожалуйста, обратитесь к разделу Кеширование чтобы узнать о поддержке кеширования, которую предоставляет Yii.
Включение кеширования схемы ¶
Кэширование схемы - это специальный тип кеширования, который должен быть включен при использовании Active Record. Как вы знаете, Active Record достаточно умен, чтобы обнаружить информацию о схеме (например, имена столбцов, типы столбцов, ограничения) таблицы БД без необходимости описывать ее вручную. Active Record получает эту информацию, выполняя дополнительные SQL запросы. При включении кэширования схемы, полученная информация о схеме будет сохранена в кэше и повторно использована при последующих запросах.
Чтобы включить кеширование схемы, сконфигурируйте компонент приложения cache для хранения информации о схеме и установите yii\db\Connection::$enableSchemaCache в true в конфигурации приложения:
Cache Components ¶
Data caching relies on the so-called cache components which represent various cache storage, such as memory, files, databases.
Cache components are usually registered as application components so that they can be globally configurable and accessible. The following code shows how to configure the cache application component to use memcached with two cache servers:
You can then access the above cache component using the expression Yii::$app->cache .
Because all cache components support the same set of APIs, you can swap the underlying cache component with a different one by reconfiguring it in the application configuration without modifying the code that uses the cache. For example, you can modify the above configuration to use APC cache:
Tip: You can register multiple cache application components. The component named cache is used by default by many cache-dependent classes (e.g. yii\web\UrlManager).
Кэширование запросов ¶
Кэширование запросов - это специальная функция, построенная на основе кэширования данных. Она предназначена для кэширования результатов запросов к базе данных.
Кэширование запросов требует DB connection действительный cache компонента приложения. Предпологая, что $db это yii\db\Connection экземпляр, простое использование запросов кэширования происходит следующим образом:
Кэширование запросов может быть использовано как для DAO, так и для ActiveRecord:
Информация: Некоторые СУБД (например, MySQL) поддерживают кэширование запросов любого механизма на стороне сервера БД. КЗ описано разделом выше. Оно имеет безусловное преимущество, поскольку, благодаря ему, можно указать гибкие зависимости кэша и это более эффективно.
Оптимизация автозагрузчика Composer ¶
Поскольку автозагрузчик Composer'а используется для подключения большого количества файлов сторонних классов, вы должны оптимизировать его, выполнив следующую команду:
Профилирование производительности ¶
Вы должны профилировать код, чтобы определить узкие места в производительности и принять соответствующие меры. Следующие инструменты для профилирования могут оказаться полезными:
Data caching is about storing some PHP variables in cache and retrieving it later from cache. It is also the foundation for more advanced caching features, such as query caching and page caching.
The following code is a typical usage pattern of data caching, where $cache refers to a cache component:
Since version 2.0.11, cache component provides getOrSet() method that simplifies code for data getting, calculating and storing. The following code does exactly the same as the previous example:
When cache has data associated with the $key , the cached value will be returned. Otherwise, the passed anonymous function will be executed to calculate the value that will be cached and returned.
If the anonymous function requires some data from the outer scope, you can pass it with the use statement. For example:
Note: getOrSet() method supports duration and dependencies as well. See Cache Expiration and Cache Dependencies to know more.
Cache Dependencies ¶
Besides expiration setting, cached data item may also be invalidated by changes of the so-called cache dependencies. For example, yii\caching\FileDependency represents the dependency of a file's modification time. When this dependency changes, it means the corresponding file is modified. As a result, any outdated file content found in the cache should be invalidated and the get() call should return false .
Cache dependencies are represented as objects of yii\caching\Dependency descendant classes. When you call set() to store a data item in the cache, you can pass along an associated cache dependency object. For example,
Below is a summary of the available cache dependencies:
-
: the dependency is changed if any of the dependencies on the chain is changed. : the dependency is changed if the query result of the specified SQL statement is changed. : the dependency is changed if the result of the specified PHP expression is changed. : the dependency is changed if the file's last modification time is changed. : associates a cached data item with one or multiple tags. You may invalidate the cached data items with the specified tag(s) by calling yii\caching\TagDependency::invalidate().
Note: Avoid using exists() method along with dependencies. It does not check whether the dependency associated with the cached data, if there is any, has changed. So a call to get() may return false while exists() returns true .
Конфигурации ¶
Кэширование запросов имеет три глобальных конфигурационных параметра через yii\db\Connection:
-
: включить или выключить кэширование запросов; По умолчанию true . Стоит отметить, что для использования кэширования вам может понадобиться компонент cache, как показано в queryCache; : количество секунд кэширования результата. Для бесконечного кэша используйте 0 . Именно это значение выставляется yii\db\Connection::cache(), если не указать время явно; : ID компонента кэширования. По умолчанию 'cache' . Кэширования запросов работает только в том случае, если используется компонент приложения кэш.
Cache Flushing ¶
When you need to invalidate all the stored cache data, you can call yii\caching\Cache::flush().
You can flush the cache from the console by calling yii cache/flush as well.
- yii cache : lists the available caches in application
- yii cache/flush cache1 cache2 : flushes the cache components cache1 , cache2 (you can pass multiple component names separated with space)
- yii cache/flush-all : flushes all cache components in the application
- yii cache/flush-schema db : clears DB schema cache for a given connection component
Info: Console application uses a separate configuration file by default. Ensure, that you have the same caching components in your web and console application configs to reach the proper effect.
Кэширование данных заключается в сохранении некоторой переменной PHP в кэше и её последующем извлечении. Оно является основой для расширенных возможностей, таких как кэширование запросов и кэширование страниц.
Приведённый ниже код является типичным случаем кэширования данных, где $cache указывает на компонент кэширования:
Начиная с версии 2.0.11, компонент кэширования предоставляет метод getOrSet(), который упрощает код при получении, вычислении и сохранении данных. Приведённый ниже код делает в точности то же самое, что и код в предыдущем примере:
Если в кэше есть данные по ключу $key , они будут сразу возвращены. Иначе, будет вызвана переданная анонимная функция, вычисляющая значение, которое будет сохранено в кэш и возвращено из метода.
В случае, когда анонимной функции требуются данные из внешней области видимости, можно передать их с помощью оператора use . Например:
Примечание: В getOrSet() можно передать срок действия и зависимости кэша. Прочтите Срок действия кэша и Зависимости кеша чтобы узнать больше.
Cache Keys ¶
Each data item stored in cache is uniquely identified by a key. When you store a data item in cache, you have to specify a key for it. Later when you retrieve the data item from cache, you should provide the corresponding key.
You may use a string or an arbitrary value as a cache key. When a key is not a string, it will be automatically serialized into a string.
A common strategy of defining a cache key is to include all determining factors in terms of an array. For example, yii\db\Schema uses the following key to cache schema information about a database table:
As you can see, the key includes all necessary information needed to uniquely specify a database table.
Note: Values stored in cache via multiSet() or multiAdd() can have only string or integer keys. If you need to set more complex key store the value separately via set() or add().
When the same cache storage is used by different applications, you should specify a unique cache key prefix for each application to avoid conflicts of cache keys. This can be done by configuring the yii\caching\Cache::$keyPrefix property. For example, in the application configuration you can write the following code:
To ensure interoperability, only alphanumeric characters should be used.
Очистка кэша ¶
Для очистки всего кэша, вы можете вызвать yii\caching\Cache::flush().
Также вы можете очистить кэш из консоли, вызвав yii cache/flush .
- yii cache : отображает список доступных кэширующих компонентов приложения
- yii cache/flush cache1 cache2 : очищает кэш в компонентах cache1 , cache2 (можно передать несколько названий компонентов кэширования, разделяя их пробелом)
- yii cache/flush-all : очищает кэш во всех кэширующих компонентах приложения
- yii cache/flush-schema db : очищает кеш схемы базы данных для данного компонента соединения
Информация: Консольное приложение использует отдельный конфигурационный файл по умолчанию. Для получения должного результата, убедитесь, что в конфигурациях консольного и веб-приложения у вас одинаковые компоненты кэширования.
Cache APIs ¶
All cache components have the same base class yii\caching\Cache and thus support the following APIs:
-
: retrieves a data item from cache with a specified key. A false value will be returned if the data item is not found in the cache or is expired/invalidated. : stores a data item identified by a key in cache. : stores a data item identified by a key in cache if the key is not found in the cache. : retrieves a data item from cache with a specified key or executes passed callback, stores return of the callback in a cache by a key and returns that data. : retrieves multiple data items from cache with the specified keys. : stores multiple data items in cache. Each item is identified by a key. : stores multiple data items in cache. Each item is identified by a key. If a key already exists in the cache, the data item will be skipped. : returns a value indicating whether the specified key is found in the cache. : removes a data item identified by a key from the cache. : removes all data items from the cache.
Note: Do not cache a false boolean value directly because the get() method uses false return value to indicate the data item is not found in the cache. You may put false in an array and cache this array instead to avoid this problem.
Some cache storage, such as MemCache, APC, support retrieving multiple cached values in a batch mode, which may reduce the overhead involved in retrieving cached data. The APIs multiGet() and multiAdd() are provided to exploit this feature. In case the underlying cache storage does not support this feature, it will be simulated.
Because yii\caching\Cache implements ArrayAccess , a cache component can be used like an array. The following are some examples:
Срок действия кэша ¶
Элементы данных, хранимые в кэше, остаются там навсегда и могут быть удалены только из-за особенностей функционирования хранилища (например, место для кэширования заполнено и старые данные удаляются). Чтобы изменить этот режим, вы можете передать истечение срока действия ключа при вызове метода set(). Параметр указывает на то, сколько секунд элемент кэша может считаться актуальным. Если срок годности ключа истёк, get() вернёт false :
Начиная с версии 2.0.11 вы можете изменить значение по умолчанию (бесконечность) для длительности кэширования задав defaultDuration в конфигурации компонента кэша. Таким образом, можно будет не передавать значение duration в set() каждый раз.
Использование обычных массивов ¶
Хотя Active Record очень удобно использовать, это не так эффективно, как использование простых массивов, когда вам нужно получить большое количество данных из БД. В этом случае вы можете вызвать asArray() при использовании Active Record для получения данных, чтобы извлеченные данные были представлены в виде массивов вместо громоздких записей Active Record. Например,
В приведенном выше коде, $posts будет заполнего массивом строк из таблицы. Каждая строка - это обычный массив. Чтобы получить доступ к столбцу title в i-й строке, вы можете использовать выражение $posts[$i]['title'] .
Вы также можете использовать DAO для создания запросов и извлечения данных в виде обычных массивов.
Использование ¶
Вы можете использовать yii\db\Connection::cache(), если у вас есть несколько SQL запросов, которые необходимо закэшировать:
Любые SQL запросы в анонимной функции будут кэшироваться в течение указанного промежутка времени и с помощью заданной зависимости. Если результат запроса в кэше актуален, запрос будет пропущен, и вместо этого из кэша будет возвращен результат. Если вы не укажете параметр '$duration' , то значение queryCacheDuration будет использоваться вместо него.
Иногда в пределах "cache()" вы можете захотеть отключить кэширование запроса. В этом случае вы можете использовать yii\db\Connection::noCache().
Если вы просто хотите использовать кэширование для одного запроса, вы можете вызвать yii\db\Command::cache() при построении команды. Например:
Вы также можете использовать yii\db\Command::noCache() для отключения кэширования запросов для одной команды. Например:
Компоненты кэширования ¶
Кэширование данных опирается на компоненты кэширования, которые представляют различные хранилища, такие как память, файлы и базы данных.
Вы можете получить доступ к компоненту кэша, используя выражение Yii::$app->cache .
Поскольку все компоненты кэша поддерживают единый API-интерфейс - вы можете менять основной компонент кэша на другой через конфигурацию приложения. Код, использующий кэш, при этом не меняется. Например, можно изменить конфигурацию выше для использования APC cache следующим образом:
Подсказка: Вы можете зарегистрировать несколько кэш-компонентов приложения. Компонент с именем cache используется по умолчанию многими классами (например, yii\web\UrlManager).
Query Caching ¶
Query caching is a special caching feature built on top of data caching. It is provided to cache the result of database queries.
Query caching requires a DB connection and a valid cache application component. The basic usage of query caching is as follows, assuming $db is a yii\db\Connection instance:
Query caching can be used for DAO as well as ActiveRecord:
Info: Some DBMS (e.g. MySQL) also support query caching on the DB server-side. You may choose to use either query caching mechanism. The query caching described above has the advantage that you may specify flexible cache dependencies and are potentially more efficient.
Since 2.0.14 you can use the following shortcuts:
Поддерживаемые хранилища ¶
Yii поддерживает множество хранилищ кэша:
-
: использует расширение PHP APC. Эта опция считается самой быстрой при работе с кэшем в «толстом» централизованном приложении (т.е. один сервер, без выделенного балансировщика нагрузки и т.д.); : использует таблицу базы данных для хранения кэшированных данных. Чтобы использовать этот кэш, вы должны создать таблицу так, как это описано в yii\caching\DbCache::$cacheTable; : является кэшем-пустышкой, не реализующим реального кэширования. Смысл этого компонента в упрощении кода, проверяющего наличие кэша. Вы можете использовать данный тип кэша и переключиться на реальное кэширование позже. Примеры: использование при разработке; если сервер не поддерживает кэш. Для извлечения данных в этом случае используется один и тот же код Yii::$app->cache->get($key) . При этом можно не беспокоиться, что Yii::$app->cache может быть null ; : использует обычные файлы для хранения кэшированных данных. Замечательно подходит для кэширования больших кусков данных, таких как содержимое страницы; : использует расширения PHP memcache и memcached. Этот вариант может рассматриваться как самый быстрый при работе в распределенных приложениях (например, с несколькими серверами, балансировкой нагрузки и так далее);
- yii\redis\Cache : реализует компонент кэша на основе Redis, хранилища ключ-значение (требуется Redis версии 2.6.12 или выше); : использует расширение PHP WinCache (смотрите также); (deprecated): использует расширение PHP XCache; (deprecated): использует Zend Data Cache.
Подсказка: Вы можете использовать разные способы хранения кэша в одном приложении. Общая стратегия заключается в использовании памяти под хранение небольших часто используемых данных (например, статистические данные). Для больших и реже используемых данных (например, содержимое страницы) лучше использовать файлы или базу данных.
Асинхронная обработка данных ¶
Когда запрос включает в себя некоторые ресурсоёмкие операции, вы должны подумать о том, чтобы выполнить эти операции асинхронно, не заставляя пользователя ожидать их окончания.
Существует два метода асинхронной обработки данных: pull и push.
В методе pull, всякий раз, когда запрос включает в себя некоторые сложные операции, вы создаете задачу и сохраняете ее в постоянном хранилище, таком как база данных. Затем в отдельном процессе (таком как задание cron) получаете эту задачу и обрабатываете ее.
Этот метод легко реализовать, но у него есть некоторые недостатки. Например, задачи надо периодически забирать из места их хранения. Если делать это слишком редко, задачи будут обрабатываться с большой задержкой, а если слишком часто - это будет создавать большие накладные расходы.
Ограничения ¶
Кэширование запросов не работает с результатами запросов, которые содержат обработчики ресурсов. Например, при использовании столбца типа BLOB в некоторых СУБД, в качестве результата запроса будет возвращен указатель на ресурс для этого столбца данных.
Некоторые кэш хранилища имеют ограничение в размере данных. Например, Memcache ограничивает максимальный размер каждой записи до 1 Мб. Таким образом, если результат запроса превышает этот предел, данные не будут закэшированы.
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Open with Desktop
- View raw
- Copy raw contents Copy raw contents
Copy raw contents
Copy raw contents
Data caching is about storing some PHP variables in cache and retrieving it later from cache. It is also the foundation for more advanced caching features, such as query caching and page caching.
The following code is a typical usage pattern of data caching, where $cache refers to a cache component:
Since version 2.0.11, cache component provides [[yii\caching\Cache::getOrSet()|getOrSet()]] method that simplifies code for data getting, calculating and storing. The following code does exactly the same as the previous example:
When cache has data associated with the $key , the cached value will be returned. Otherwise, the passed anonymous function will be executed to calculate the value that will be cached and returned.
If the anonymous function requires some data from the outer scope, you can pass it with the use statement. For example:
Note: [[yii\caching\Cache::getOrSet()|getOrSet()]] method supports duration and dependencies as well. See Cache Expiration and Cache Dependencies to know more.
Data caching relies on the so-called cache components which represent various cache storage, such as memory, files, databases.
Cache components are usually registered as application components so that they can be globally configurable and accessible. The following code shows how to configure the cache application component to use memcached with two cache servers:
You can then access the above cache component using the expression Yii::$app->cache .
Because all cache components support the same set of APIs, you can swap the underlying cache component with a different one by reconfiguring it in the application configuration without modifying the code that uses the cache. For example, you can modify the above configuration to use [[yii\caching\ApcCache|APC cache]]:
Tip: You can register multiple cache application components. The component named cache is used by default by many cache-dependent classes (e.g. [[yii\web\UrlManager]]).
Supported Cache Storage
Yii supports a wide range of cache storage. The following is a summary:
- [[yii\caching\ApcCache]]: uses PHP APC extension. This option can be considered as the fastest one when dealing with cache for a centralized thick application (e.g. one server, no dedicated load balancers, etc.).
- [[yii\caching\DbCache]]: uses a database table to store cached data. To use this cache, you must create a table as specified in [[yii\caching\DbCache::cacheTable]].
- [[yii\caching\ArrayCache]]: provides caching for the current request only by storing the values in an array. For enhanced performance of ArrayCache, you can disable serialization of the stored data by setting [[yii\caching\ArrayCache::$serializer]] to false .
- [[yii\caching\DummyCache]]: serves as a cache placeholder which does no real caching. The purpose of this component is to simplify the code that needs to check the availability of cache. For example, during development or if the server doesn't have actual cache support, you may configure a cache component to use this cache. When an actual cache support is enabled, you can switch to use the corresponding cache component. In both cases, you may use the same code Yii::$app->cache->get($key) to attempt retrieving data from the cache without worrying that Yii::$app->cache might be null .
- [[yii\caching\FileCache]]: uses standard files to store cached data. This is particularly suitable to cache large chunk of data, such as page content.
- [[yii\caching\MemCache]]: uses PHP memcache and memcached extensions. This option can be considered as the fastest one when dealing with cache in a distributed applications (e.g. with several servers, load balancers, etc.)
- [[yii\redis\Cache]]: implements a cache component based on Redis key-value store (redis version 2.6.12 or higher is required).
- [[yii\caching\WinCache]]: uses PHP WinCache (see also) extension.
- [[yii\caching\XCache]] (deprecated): uses PHP XCache extension.
- [[yii\caching\ZendDataCache]] (deprecated): uses Zend Data Cache as the underlying caching medium.
Tip: You may use different cache storage in the same application. A common strategy is to use memory-based cache storage to store data that is small but constantly used (e.g. statistical data), and use file-based or database-based cache storage to store data that is big and less frequently used (e.g. page content).
All cache components have the same base class [[yii\caching\Cache]] and thus support the following APIs:
- [[yii\caching\Cache::get()|get()]]: retrieves a data item from cache with a specified key. A false value will be returned if the data item is not found in the cache or is expired/invalidated.
- [[yii\caching\Cache::set()|set()]]: stores a data item identified by a key in cache.
- [[yii\caching\Cache::add()|add()]]: stores a data item identified by a key in cache if the key is not found in the cache.
- [[yii\caching\Cache::getOrSet()|getOrSet()]]: retrieves a data item from cache with a specified key or executes passed callback, stores return of the callback in a cache by a key and returns that data.
- [[yii\caching\Cache::multiGet()|multiGet()]]: retrieves multiple data items from cache with the specified keys.
- [[yii\caching\Cache::multiSet()|multiSet()]]: stores multiple data items in cache. Each item is identified by a key.
- [[yii\caching\Cache::multiAdd()|multiAdd()]]: stores multiple data items in cache. Each item is identified by a key. If a key already exists in the cache, the data item will be skipped.
- [[yii\caching\Cache::exists()|exists()]]: returns a value indicating whether the specified key is found in the cache.
- [[yii\caching\Cache::delete()|delete()]]: removes a data item identified by a key from the cache.
- [[yii\caching\Cache::flush()|flush()]]: removes all data items from the cache.
Note: Do not cache a false boolean value directly because the [[yii\caching\Cache::get()|get()]] method uses false return value to indicate the data item is not found in the cache. You may put false in an array and cache this array instead to avoid this problem.
Some cache storage, such as MemCache, APC, support retrieving multiple cached values in a batch mode, which may reduce the overhead involved in retrieving cached data. The APIs [[yii\caching\Cache::multiGet()|multiGet()]] and [[yii\caching\Cache::multiAdd()|multiAdd()]] are provided to exploit this feature. In case the underlying cache storage does not support this feature, it will be simulated.
Because [[yii\caching\Cache]] implements ArrayAccess , a cache component can be used like an array. The following are some examples:
Each data item stored in cache is uniquely identified by a key. When you store a data item in cache, you have to specify a key for it. Later when you retrieve the data item from cache, you should provide the corresponding key.
You may use a string or an arbitrary value as a cache key. When a key is not a string, it will be automatically serialized into a string.
A common strategy of defining a cache key is to include all determining factors in terms of an array. For example, [[yii\db\Schema]] uses the following key to cache schema information about a database table:
As you can see, the key includes all necessary information needed to uniquely specify a database table.
Note: Values stored in cache via [[yii\caching\Cache::multiSet()|multiSet()]] or [[yii\caching\Cache::multiAdd()|multiAdd()]] can have only string or integer keys. If you need to set more complex key store the value separately via [[yii\caching\Cache::set()|set()]] or [[yii\caching\Cache::add()|add()]].
When the same cache storage is used by different applications, you should specify a unique cache key prefix for each application to avoid conflicts of cache keys. This can be done by configuring the [[yii\caching\Cache::keyPrefix]] property. For example, in the application configuration you can write the following code:
To ensure interoperability, only alphanumeric characters should be used.
A data item stored in a cache will remain there forever unless it is removed because of some caching policy enforcement (e.g. caching space is full and the oldest data are removed). To change this behavior, you can provide an expiration parameter when calling [[yii\caching\Cache::set()|set()]] to store a data item. The parameter indicates for how many seconds the data item can remain valid in the cache. When you call [[yii\caching\Cache::get()|get()]] to retrieve the data item, if it has passed the expiration time, the method will return false , indicating the data item is not found in the cache. For example,
Since 2.0.11 you may set [[yii\caching\Cache::$defaultDuration|defaultDuration]] value in your cache component configuration if you prefer a custom cache duration over the default unlimited duration. This will allow you not to pass custom duration parameter to [[yii\caching\Cache::set()|set()]] each time.
Besides expiration setting, cached data item may also be invalidated by changes of the so-called cache dependencies. For example, [[yii\caching\FileDependency]] represents the dependency of a file's modification time. When this dependency changes, it means the corresponding file is modified. As a result, any outdated file content found in the cache should be invalidated and the [[yii\caching\Cache::get()|get()]] call should return false .
Cache dependencies are represented as objects of [[yii\caching\Dependency]] descendant classes. When you call [[yii\caching\Cache::set()|set()]] to store a data item in the cache, you can pass along an associated cache dependency object. For example,
Below is a summary of the available cache dependencies:
- [[yii\caching\ChainedDependency]]: the dependency is changed if any of the dependencies on the chain is changed.
- [[yii\caching\DbDependency]]: the dependency is changed if the query result of the specified SQL statement is changed.
- [[yii\caching\ExpressionDependency]]: the dependency is changed if the result of the specified PHP expression is changed.
- [[yii\caching\FileDependency]]: the dependency is changed if the file's last modification time is changed.
- [[yii\caching\TagDependency]]: associates a cached data item with one or multiple tags. You may invalidate the cached data items with the specified tag(s) by calling [[yii\caching\TagDependency::invalidate()]].
Note: Avoid using [[yii\caching\Cache::exists()|exists()]] method along with dependencies. It does not check whether the dependency associated with the cached data, if there is any, has changed. So a call to [[yii\caching\Cache::get()|get()]] may return false while [[yii\caching\Cache::exists()|exists()]] returns true .
Query caching is a special caching feature built on top of data caching. It is provided to cache the result of database queries.
Query caching requires a [[yii\db\Connection|DB connection]] and a valid cache application component. The basic usage of query caching is as follows, assuming $db is a [[yii\db\Connection]] instance:
Query caching can be used for DAO as well as ActiveRecord:
Info: Some DBMS (e.g. MySQL) also support query caching on the DB server-side. You may choose to use either query caching mechanism. The query caching described above has the advantage that you may specify flexible cache dependencies and are potentially more efficient.
Since 2.0.14 you can use the following shortcuts:
Query caching has three global configurable options through [[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.
You can use [[yii\db\Connection::cache()]] if you have multiple SQL queries that need to take advantage of query caching. The usage is as follows,
Any SQL queries in the anonymous function will be cached for the specified duration with the specified dependency. If the result of a query is found valid in the cache, the query will be skipped and the result will be served from the cache instead. If you do not specify the $duration parameter, the value of [[yii\db\Connection::queryCacheDuration|queryCacheDuration]] will be used instead.
Sometimes within cache() , you may want to disable query caching for some particular queries. You can use [[yii\db\Connection::noCache()]] in this case.
If you just want to use query caching for a single query, you can call [[yii\db\Command::cache()]] when building the command. For example,
You can also use [[yii\db\Command::noCache()]] to disable query caching for a single command. For example,
Query caching does not work with query results that contain resource handlers. For example, when using the BLOB column type in some DBMS, the query result will return a resource handler for the column data.
Some caching storage has size limitation. For example, memcache limits the maximum size of each entry to be 1MB. Therefore, if the size of a query result exceeds this limit, the caching will fail.
When you need to invalidate all the stored cache data, you can call [[yii\caching\Cache::flush()]].
You can flush the cache from the console by calling yii cache/flush as well.
- yii cache : lists the available caches in application
- yii cache/flush cache1 cache2 : flushes the cache components cache1 , cache2 (you can pass multiple component names separated with space)
- yii cache/flush-all : flushes all cache components in the application
- yii cache/flush-schema db : clears DB schema cache for a given connection component
Info: Console application uses a separate configuration file by default. Ensure, that you have the same caching components in your web and console application configs to reach the proper effect.
Зависимости кэша ¶
В добавок к изменению срока действия ключа элемент может быть признан недействительным из-за изменения зависимостей. К примеру, yii\caching\FileDependency представляет собой зависимость от времени изменения файла. Когда это время изменяется, любые устаревшие данные, найденные в кэше, должны быть признаны недействительным, а get() в этом случае должен вернуть false .
Зависимости кэша представлены в виде объектов потомков класса yii\caching\Dependency. Когда вы вызываете set() метод, чтобы сохранить элемент данных в кэше, вы можете передать туда зависимость.
Ниже приведен список доступных зависимостей кэша:
-
: зависимость меняется, если любая зависимость в цепочке изменяется; : зависимость меняется, если результат некоторого определенного SQL запроса изменён; : зависимость меняется, если результат определенного PHP выражения изменён; : зависимость меняется, если изменилось время последней модификации файла; : Связывает кэшированные данные элемента с одним или несколькими тегами. Вы можете аннулировать кэширование данных элементов с заданным тегом(тегами) по вызову. yii\caching\TagDependency::invalidate();
Кэш API, ¶
У всех компонентов кэша имеется один базовый класс yii\caching\Cache со следующими методами:
-
: возвращает данные по указанному ключу. Если данные не найдены или устарели, то значение false будет возвращено; : сохраняет данные по ключу; : сохраняет данные по ключу если такого ключа ещё нет; : возвращает данные по указанному ключу или выполняет переданную анонимную функцию для вычисления значения, а полученные данные сохраняет в кэш и возвращает; : извлекает сразу несколько элементов данных из кэша по заданным ключам; : сохраняет несколько элементов данных. Каждый элемент идентифицируется ключом; : сохраняет несколько элементов данных. Каждый элемент идентифицируется ключом. Если ключ уже существует, то сохранения не происходит; : есть ли указанный ключ в кэше; : удаляет указанный ключ; : удаляет все данные.
Примечание: Не кэшируйте непосредственно значение false , потому что get() использует false для случая, когда данные не найдены в кэше. Вы можете обернуть false в массив и закэшировать его, чтобы избежать данной проблемы.
Некоторые кэш-хранилища, например, MemCache или APC, поддерживают получение нескольких значений в пакетном режиме, что может сократить накладные расходы на получение данных. Данную возможность возможно использовать при помощи multiGet() и multiAdd(). В случае, если хранилище не поддерживает эту функцию, она будет имитироваться.
Так как yii\caching\Cache реализует ArrayAccess - следовательно компонент кэша можно использовать как массив:
Cache Expiration ¶
A data item stored in a cache will remain there forever unless it is removed because of some caching policy enforcement (e.g. caching space is full and the oldest data are removed). To change this behavior, you can provide an expiration parameter when calling set() to store a data item. The parameter indicates for how many seconds the data item can remain valid in the cache. When you call get() to retrieve the data item, if it has passed the expiration time, the method will return false , indicating the data item is not found in the cache. For example,
Since 2.0.11 you may set defaultDuration value in your cache component configuration if you prefer a custom cache duration over the default unlimited duration. This will allow you not to pass custom duration parameter to set() each time.
Отключение режима отладки ¶
При запуске приложения в производственном режиме, вам нужно отключить режим отладки. Yii использует значение константы YII_DEBUG чтобы указать, следует ли включить режим отладки. Когда режим отладки включен, Yii тратит дополнительное время, чтобы создать и записать отладочную информацию.
Вы можете разместить следующую строку кода в начале входного скрипта чтобы отключить режим отладки:
Информация: Значение по умолчанию для константы YII_DEBUG — false . Так что, если вы уверены, что не изменяете значение по умолчанию где-то в коде приложения, можете просто удалить эту строку, чтобы отключить режим отладки.
Usages ¶
You can use yii\db\Connection::cache() if you have multiple SQL queries that need to take advantage of query caching. The usage is as follows,
Any SQL queries in the anonymous function will be cached for the specified duration with the specified dependency. If the result of a query is found valid in the cache, the query will be skipped and the result will be served from the cache instead. If you do not specify the $duration parameter, the value of queryCacheDuration will be used instead.
Sometimes within cache() , you may want to disable query caching for some particular queries. You can use yii\db\Connection::noCache() in this case.
If you just want to use query caching for a single query, you can call yii\db\Command::cache() when building the command. For example,
You can also use yii\db\Command::noCache() to disable query caching for a single command. For example,
Читайте также: