Yii2 – Как работает кеширование запросов к базе данных?

Данный

    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,

🤔 А знаете ли вы, что...
Yii использует объектно-ориентированный подход к разработке и следует принципам MVC (Model-View-Controller).


50
1

Ответ:

Решено

В документации говорится, что 0 продолжительность означает «бесконечность». Если вы передадите null в качестве продолжительности, вместо этого будет использоваться значение, установленное в свойстве $defaultDuration.

На самом деле, что означает «бесконечность», зависит от того, какой механизм кэширования вы используете.

Например, yii\caching\FileCache устанавливает срок действия на 1 год, когда вы передаете 0 в качестве продолжительности.

Memcache не устанавливает конкретный срок действия, но ваши данные могут быть удалены, когда кеш заполнен и требуется место для новых записей.

yii\caching\ArrayCache сохраняет в памяти только кешированные данные, поэтому они будут доступны только во время текущего запроса, а при следующем запросе весь кеш будет удален.