Кэширование

Общие вопросы по использованию второй версии фреймворка. Если не знаете как что-то сделать и это про Yii 2, вам сюда.
Ответить
Аватара пользователя
diselop
Сообщения: 240
Зарегистрирован: 2013.01.29, 14:56

Кэширование

Сообщение diselop »

Имеем кэшированный запрос как по мануалу.
http://www.yiiframework.com/doc-2.0/gui ... ry-caching

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

$result = $db->cache(function ($db) {
    return $db->createCommand('SELECT * FROM customer WHERE id=1')->queryOne();
});
Интерусуют 2 вопроса
1. Есть запрос добавление записи( выполняется 1-2 раза в месяц), и при этом запросе нужно обновить кэш.
2. Возможно ли в функцию передать какие-либо параметры?
kawabanga
Сообщения: 806
Зарегистрирован: 2013.10.12, 23:35
Откуда: Новосибирск

Re: Кэширование

Сообщение kawabanga »

Я для себя проблему с запросами решил кэшированием mysql)
astronin
Сообщения: 606
Зарегистрирован: 2012.01.30, 17:46

Re: Кэширование

Сообщение astronin »

прочтите всю документацию по кешированию, там есть ответы на оба вопроса
Аватара пользователя
diselop
Сообщения: 240
Зарегистрирован: 2013.01.29, 14:56

Re: Кэширование

Сообщение diselop »

astronin писал(а):прочтите всю документацию по кешированию, там есть ответы на оба вопроса
А можно ссылку, а то вроде все перечитывал :D
Аватара пользователя
yiijeka
Сообщения: 3103
Зарегистрирован: 2012.01.28, 09:14
Откуда: Беларусь
Контактная информация:

Re: Кэширование

Сообщение yiijeka »

1. Добавить DbDependency с

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

'sql' => 'SELECT updated_at FROM customer WHERE id=1 ' 
или подобным. Но кэшерованный запрос должен быть намного тормознутее Dependency запроса. А то смысл теряется.
2. Можно - это обычный php:

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

function ($db) use ($yourParam) { 
return $db->createCommand('SELECT * FROM customer WHERE id=' . $yourParam)->queryOne();
}
Аватара пользователя
diselop
Сообщения: 240
Зарегистрирован: 2013.01.29, 14:56

Re: Кэширование

Сообщение diselop »

yiijeka писал(а):1. Добавить DbDependency с

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

'sql' => 'SELECT updated_at FROM customer WHERE id=1 ' 
или подобным. Но кэшерованный запрос должен быть намного тормознутее Dependency запроса. А то смысл теряется.
2. Можно - это обычный php:

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

function ($db) use ($yourParam) { 
return $db->createCommand('SELECT * FROM customer WHERE id=' . $yourParam)->queryOne();
}

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

use ($yourParam)
Спасибо, то что нужно.
по поводу Dependency я знаю, просто кэш обновляется очень очень редко, раз в месяц где-то.
Аватара пользователя
diselop
Сообщения: 240
Зарегистрирован: 2013.01.29, 14:56

Re: Кэширование

Сообщение diselop »

Подскажите если так кэшировать запрос

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

$result = $db->cache(function ($db) {
    return $db->createCommand('SELECT * FROM customer WHERE id=1')->queryOne();
});
 
и он будет вызываться из разных мест, то кэш будет одил или их несколько создастся?
Аватара пользователя
yiijeka
Сообщения: 3103
Зарегистрирован: 2012.01.28, 09:14
Откуда: Беларусь
Контактная информация:

Re: Кэширование

Сообщение yiijeka »

Один
eresik
Сообщения: 44
Зарегистрирован: 2010.10.23, 10:39

Re: Кэширование

Сообщение eresik »

С кэшированием конечно в yii2 наворотили...
Я бы изменил подход к кэшированию пока не поздно.
Реально ведь жутко неудобно как сейчас - с анонимной функцией.
Аватара пользователя
yiijeka
Сообщения: 3103
Зарегистрирован: 2012.01.28, 09:14
Откуда: Беларусь
Контактная информация:

Re: Кэширование

Сообщение yiijeka »

оО Пулл реквест никто не мешает отправить :)
eresik
Сообщения: 44
Зарегистрирован: 2010.10.23, 10:39

Re: Кэширование

Сообщение eresik »

Да как раз после моей "issue" переделали кэширование.
https://github.com/yiisoft/yii2/issues/3611

Не ожидал только что сделают так неудобно.
Там в комментариях был весьма неплохой подход предложен https://github.com/yiisoft/yii2/issues/ ... t-44406720
dmeroff
Сообщения: 101
Зарегистрирован: 2012.06.05, 14:32
Откуда: Петрозаводск
Контактная информация:

Re: Кэширование

Сообщение dmeroff »

Можно поинтересоваться, а чем неудобно кеширование с использованием анонимной функции?
По поводу "пока не поздно", по-моему уже как раз поздно, ведь был уже стабильный релиз, поэтому теперь ломать обратную совместимость никто не будет.
zelenin
Сообщения: 10596
Зарегистрирован: 2013.04.20, 11:30

Re: Кэширование

Сообщение zelenin »

eresik писал(а):С кэшированием конечно в yii2 наворотили...
Я бы изменил подход к кэшированию пока не поздно.
Реально ведь жутко неудобно как сейчас - с анонимной функцией.
документацию прочли? есть разные варианты.
Аватара пользователя
yiijeka
Сообщения: 3103
Зарегистрирован: 2012.01.28, 09:14
Откуда: Беларусь
Контактная информация:

Re: Кэширование

Сообщение yiijeka »

Почему вас не устраивает анонимная функция - пример пожалуйста в студию!
eresik
Сообщения: 44
Зарегистрирован: 2010.10.23, 10:39

Re: Кэширование

Сообщение eresik »

Допустим надо кэшировать простой реляционный запрос
$country->states;

который где-нибудь во view выполняется

И что, городить огород во view с анонимной функцией?
$states=\Yii::$app->db->cache(function() use ($country){ return $country->states; });
Это же выглядит ужасно, сходу непонятно, и просто засоряет код.

Конечно, можно сделать жадную загрузку ещё в контроллере, но её же не всегда можно сделать удобно, да и не всегда она нужна.
eresik
Сообщения: 44
Зарегистрирован: 2010.10.23, 10:39

Re: Кэширование

Сообщение eresik »

zelenin писал(а):документацию прочли? есть разные варианты.
Хоть убей, разных вариантов я там не вижу.
Кроме как вариант - напрямую работать с кэшем.
zelenin
Сообщения: 10596
Зарегистрирован: 2013.04.20, 11:30

Re: Кэширование

Сообщение zelenin »

eresik писал(а):Допустим надо кэшировать простой реляционный запрос
$country->states;

который где-нибудь во view выполняется

И что, городить огород во view с анонимной функцией?
$states=\Yii::$app->db->cache(function() use ($country){ return $country->states; });
Это же выглядит ужасно, сходу непонятно, и просто засоряет код.

Конечно, можно сделать жадную загрузку ещё в контроллере, но её же не всегда можно сделать удобно, да и не всегда она нужна.
еще раз, доки почитайте
zelenin
Сообщения: 10596
Зарегистрирован: 2013.04.20, 11:30

Re: Кэширование

Сообщение zelenin »

eresik писал(а): Конечно, можно сделать жадную загрузку ещё в контроллере, но её же не всегда можно сделать удобно, да и не всегда она нужна.
Yii::$app->cache->get - если вы это называет прямым доступом к кэшу, то пусть так. Это решает вашу. проблему. Внесите в модель метод с таким кэшированием и все.
Ответить