Кеширует ли yii2 запросы к БД по умолчанию?

В Yii2 запросы к базе данных не кешируются по умолчанию. Однако, Yii2 предоставляет возможность легко настраивать и использовать кэширование для запросов.

В Yii2 кэширование осуществляется с использованием компонента YiicachingCache. Этот компонент может быть настроен для использования различных типов кэша, таких как файловый кэш, кэш на основе базы данных или Memcached.

Для кэширования запросов к базе данных в Yii2 можно использовать один из следующих подходов:

1. Кеширование на уровне запроса:
Для кэширования отдельного запроса к базе данных можно использовать методы find() или findBySql() моделей ActiveRecord. Например:

   $query = Post::find()->where(['status' => 1]);
   $result = $query->cache()->all();

Метод cache() применяет кэширование к запросу, используя настройки по умолчанию для компонента кэша. Результат запроса будет закэширован и, при последующих вызовах этого же запроса, данные будут получаться из кэша, скорее всего, существенно ускоряя запросы.

Кроме метода cache() можно использовать и другие методы для настройки кэширования, такие как cacheDuration() для указания времени жизни кэша или cacheDependency() для настройки зависимостей от других кэшей или файлов.

2. Кеширование на уровне запросов с использованием компонентов кэширования:
Кроме кеширования на уровне запроса, Yii2 также предоставляет механизм кэширования на уровне компонентов кэширования, которые могут быт настроены для кэширования результатов выполнения запросов или любых других данных при помощи методов Yii::$app->cache.

Пример:

   $result = Yii::$app->cache->getOrSet('myCacheKey', function() {
       $query = Post::find()->where(['status' => 1]);
       return $query->all();
   }, 3600);

В этом примере результат запроса закэширован с использованием метода getOrSet(), который пытается получить данные из кэша с ключом 'myCacheKey'. Если данные отсутствуют в кэше, то выполняется lambda-функция, в которой выполняется запрос и результат сохраняется в кэш с указанным временем жизни - 3600 секунд.

Использование компонентов кэширования позволяет и управлять кэшем более гибко и детально настраивать его параметры, включая время жизни кэша, зависимости и т. д.

3. Кеширование запросов на уровне конфигурации:
В Yii2 также можно настроить кэширование запросов на уровне конфигурации приложения. Для этого нужно внести соответствующие настройки в файл конфигурации (common/config/main.php или frontend/config/main.php):

   return [
       // ...
       'components' => [
           // ...
           'db' => [
               'class' => 'yiidbConnection',
               'dsn' => 'mysql:host=localhost;dbname=mydatabase',
               'username' => 'myusername',
               'password' => 'mypassword',
               'enableQueryCache' => true,
           ],
           // ...
       ],
       // ...
   ];

В этом примере установлен флаг enableQueryCache в значение true для компонента БД. При этом все запросы будут автоматически кэшироваться с использованием настроек по умолчанию компонента кэша. Если вам необходимо настраивать параметры кэша более детально, вы также можете использовать дополнительные параметры компонента БД, такие как queryCache, queryCacheDuration, queryCacheDepends и т. д.

Это основные способы кэширования запросов к базе данных в Yii2. Выбор способа зависит от вашего конкретного случая использования и требований проекта.