Страница 1 из 1

Сброс кеша бд

Добавлено: 2017.11.23, 13:42
azz
Добрый день. Два вопроса.
1) пытаюсь кешировать запросы по документации. Написал вначале вот так:

Код: Выделить всё

        $item = Menu::getDb()->cache(function($db) use($url) {
            return Menu::find()->where(['display_url' => '/'.$url, 'is_hidden' => 0])->one();
        });
выполнил, убедился что запрос действительно кешируется. Потом решил изменить время кеширования. Дописал время:

Код: Выделить всё

        $item = Menu::getDb()->cache(function($db) use($url) {
            return Menu::find()->where(['display_url' => '/'.$url, 'is_hidden' => 0])->one();
        }, 10);
Выполнил несколько раз. По логике, через 10 секунд должен выполниться вновь. Но его нет. Я так понял, он закешировался с дефолтным временем в 3600 секунд. Но разве оно не должно перезаписываться явно указанным?

2) как собственно сбросить кеш запросов? Если делать как документации

Код: Выделить всё

yii\caching\Cache::flush()
то пишет

Код: Выделить всё

Non-static method yii\caching\Cache::flush() should not be called statically, assuming $this from incompatible context

Re: Сброс кеша бд

Добавлено: 2017.11.23, 14:23
someweb

Код: Выделить всё

Yii::$app->cache->flush();

Re: Сброс кеша бд

Добавлено: 2017.11.24, 11:22
Nex-Otaku
Но разве оно не должно перезаписываться явно указанным?
Не должно. Если в двух словах, настройки в самом кеше сохраняются. Поэтому, поменяли что-то в настройках кеширования - придётся сбросить кеш.

Re: Сброс кеша бд

Добавлено: 2017.12.18, 15:35
azz
Такой вопрос возник ещё. Кеширую результат некого запроса в frontend:

Код: Выделить всё

        $item = Yii::$app->cache->getOrSet($cacheKey, function() use($param) {
            return self::find()->where(['param' => $param]);
        });
param может быть разным, поэтому одним значением ключа не обойтись. Можно бы было записать так:

Код: Выделить всё

$cacheKey = 'key1'.$param
но в backend мне нужно сбрасывать этот кеш при некоторых действиях. Весь кеш сбрасывать не хочется. Можно ли это сделать только для нужного ключа? Как организовать создание ключей в виде массива?

Код: Выделить всё

[
    'key1' => [$param1, $param2, $param3, ...]
]        
Что бы потом сбросить нужную часть вот так:

Код: Выделить всё

Yii::$app->cache->delete('key1')
не соображу

Re: Сброс кеша бд

Добавлено: 2017.12.18, 17:30
ElisDN
Через TagDependency.

Re: Сброс кеша бд

Добавлено: 2017.12.19, 16:24
azz
ElisDN писал(а): 2017.12.18, 17:30 Через TagDependency.
То что нужно, спасибо!

А есть возможность увидеть, какие вообще ключи сейчас присутствуют в кеше?

Re: Сброс кеша бд

Добавлено: 2017.12.19, 17:07
ElisDN
Нет, так как ключи хешируются через buildKey().