Данный
public function getScheduleSelect() {
$duration = 86400; // cache query results for 1 day (60*60*24 secs).
$dependency = new DbDependency();
$dependency->sql = 'SELECT MAX(`modifieddatetime`) FROM {{%schedule}}';
return ArrayHelper::map(
$this->find()
->select('schedule')
->orderBy('schedule')
->distinct()
->asArray()
->cache($duration, $dependency)
->all(),
'schedule', 'schedule');
}
Если бы я изменил $duration на 0 (ноль) или NULL, остался бы кеш навсегда, если бы $dependency не изменился? Или никогда больше не проверю?
По сути, я хотел, чтобы запрос выполнялся только при изменении $dependency,





В документации говорится, что 0 продолжительность означает «бесконечность». Если вы передадите null в качестве продолжительности, вместо этого будет использоваться значение, установленное в свойстве $defaultDuration.
На самом деле, что означает «бесконечность», зависит от того, какой механизм кэширования вы используете.
Например, yii\caching\FileCache устанавливает срок действия на 1 год, когда вы передаете 0 в качестве продолжительности.
Memcache не устанавливает конкретный срок действия, но ваши данные могут быть удалены, когда кеш заполнен и требуется место для новых записей.
yii\caching\ArrayCache сохраняет в памяти только кешированные данные, поэтому они будут доступны только во время текущего запроса, а при следующем запросе весь кеш будет удален.
Да, если вы укажете длительность 0, она будет оставаться в кеше как можно дольше или до тех пор, пока не станет недействительной из-за зависимости.
Но если честно, в вашем конкретном случае я не уверен, что с кешем будет существенное улучшение. Запрос, который вы пытаетесь кэшировать, должен быть достаточно быстрым, если у вас есть индекс над столбцом schedule. А поскольку вы используете DbDependency, каждый раз будет выполняться хотя бы один SQL-запрос.
У меня нет контроля над таблицами, поэтому я не могу добавить index. Таблица, к которой я выполняю запрос, содержит более 100 тысяч записей и получает около 60-100 записей в день. DbDependancy работает в другой таблице, но информация в столбце schedule берется оттуда. В schedule table всего 10-20 записей, и он не часто меняется.
«По сути, я хотел, чтобы запрос выполнялся только при изменении $зависимости». Итак, если я поставлю
0в срок, он будет там в течение 1 года или до тех пор, пока зависимость не изменится?