Re: Кэширование, не срабатывает DbDependency
Добавлено: 2018.09.13, 06:19
Форум Yii-программистов
https://yiiframework.ru/forum/
Наверное правильней мне было сказать, устанавливаю зависимость кеша на изменение даты в поле updated_at.
Код: Выделить всё
$db = User::getDb();
$dep = new dbDependency();
$dep->sql = "SELECT MAX(updated_at) FROM user";
$result = $db->cache(function ($db) {
return User::find()->all($db);
}, 600, $dep)
3. Внимательно еще раз прочитайте доку. https://yii2-framework.readthedocs.io/e ... hing-data/Кэширование запросов требует [[yii\db\Connection|DB connection]] и приложения действительный cache. Простое использование запросов кэширования происходит следующим образом, предпологая что $db это экземпляр [[yii\db\Connection]]:
$result = $db->cache(function ($db) {
// Результат SQL запроса будет возвращен из кэша если
// кэширование запросов включено и результат запроса присутствует в кэше
return $db->createCommand('SELECT * FROM customer WHERE id=1')->queryOne();
});
Ваш return User::find()->all($db); как бы намекает на это...Ограничения
Кэширование запросов не работает с результатами запросов, которые содержат обработчики ресурсов. Например, при использовании типа столбца BLOB в некоторых СУБД, в качестве результата запроса будет выведен ресурс обработчик данных столбца.
Некоторые кэш хранилища имеют ограничение в размере данных. Например, Memcache ограничивает максимальный размер каждой записи до 1 Мб. Таким образом, если результат запроса превышает этот предел, данные не будут закешированы.
Код: Выделить всё
$db = Yii::$app->db;
$result = $db->cache(function ($db) {
return $db->createCommand('SELECT * FROM userlist WHERE id=1')->queryOne();
});
Код: Выделить всё
public function actionListUser()
{
$db = Yii::$app->db;
$result = $db->cache(function ($db) {
return $db->createCommand('SELECT * FROM userlist WHERE id=1')->queryOne();
});
return $this->render('list-user', ['users' => $result]);
}
Код: Выделить всё
$db = User::getDb();
$dep = new DbDependency();
$dep->sql = "SELECT MAX(updated_at) FROM user";
$db = Yii::$app->db;
$result = $db->cache(function ($db) {
return $db->createCommand('SELECT * FROM user WHERE id=2')->queryOne();
}, 60, $dep);
Код: Выделить всё
$dep = new DbDependency();
$dep->sql = "SELECT MAX(updated_at) FROM userlist";
$db = Yii::$app->db;
$result = $db->cache(function ($db) {
return Userlist::find()->where('id = 2')->one();
}, 180, $dep);
Код: Выделить всё
$dep = new dbDependency();
$dep->sql = "SELECT MAX(updated_at) FROM user";
$db = Yii::$app->db;
$result = $db->cache(function () {
return User::find()->all();
}, 60, $dep);
Попробуйте User::find()->limit(2)->all($db);Некоторые кэш хранилища имеют ограничение в размере данных. Например, Memcache ограничивает максимальный размер каждой записи до 1 Мб. Таким образом, если результат запроса превышает этот предел, данные не будут закешированы.
Ваш return User::find()->all($db); как бы намекает на это...
Код: Выделить всё
'cache' => [
'class' => 'yii\caching\FileCache',