Сброс кеша бд

Общие вопросы по использованию второй версии фреймворка. Если не знаете как что-то сделать и это про Yii 2, вам сюда.
Ответить
azz
Сообщения: 197
Зарегистрирован: 2016.07.06, 17:20

Сброс кеша бд

Сообщение 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
someweb
Сообщения: 552
Зарегистрирован: 2017.03.09, 10:12

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

Сообщение someweb »

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

Yii::$app->cache->flush();
Чтобы правильно задать вопрос, нужно знать бо́льшую часть ответа. Роберт Шекли.
Nex-Otaku
Сообщения: 831
Зарегистрирован: 2016.07.09, 21:07

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

Сообщение Nex-Otaku »

Но разве оно не должно перезаписываться явно указанным?
Не должно. Если в двух словах, настройки в самом кеше сохраняются. Поэтому, поменяли что-то в настройках кеширования - придётся сбросить кеш.
azz
Сообщения: 197
Зарегистрирован: 2016.07.06, 17:20

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

Сообщение 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')
не соображу
Аватара пользователя
ElisDN
Сообщения: 5845
Зарегистрирован: 2012.10.07, 10:24
Контактная информация:

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

Сообщение ElisDN »

Через TagDependency.
azz
Сообщения: 197
Зарегистрирован: 2016.07.06, 17:20

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

Сообщение azz »

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

А есть возможность увидеть, какие вообще ключи сейчас присутствуют в кеше?
Аватара пользователя
ElisDN
Сообщения: 5845
Зарегистрирован: 2012.10.07, 10:24
Контактная информация:

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

Сообщение ElisDN »

Нет, так как ключи хешируются через buildKey().
Ответить