Уверен. Я его в ручную обновляю.
Кэширование, не срабатывает DbDependency
Re: Кэширование, не срабатывает DbDependency
Наверное правильней мне было сказать, устанавливаю зависимость кеша на изменение даты в поле 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)
-
- Сообщения: 977
- Зарегистрирован: 2014.08.27, 21:54
Re: Кэширование, не срабатывает DbDependency
Дебажьте построчно в своем примере.
1. Сделайте без Dependency - кеш работает?
2. Что такое User::getDb()?
почему не как в документации для начала, чтоб удостоверится? https://yii2-framework.readthedocs.io/e ... hing-data/
Есть там и такое
1. Сделайте без Dependency - кеш работает?
2. Что такое User::getDb()?
почему не как в документации для начала, чтоб удостоверится? https://yii2-framework.readthedocs.io/e ... hing-data/
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 Мб. Таким образом, если результат запроса превышает этот предел, данные не будут закешированы.
Re: Кэширование, не срабатывает DbDependency
Кеш у меня работает, я писал об этом.
Этот код кэшируется нормально.
Данные все выводятся нормально из кэша, в отладчике Yii нет записи с БД, т.е. кэш работает нормально.
Но вот когда я изменяю поле updated_at, все так же выводится из кэша, не выводятся измененные данные.
http://nimb.ws/21XJzb
BLOB и TEXT я не использую.
Код: Выделить всё
$db = Yii::$app->db;
$result = $db->cache(function ($db) {
return $db->createCommand('SELECT * FROM userlist WHERE id=1')->queryOne();
});
Данные все выводятся нормально из кэша, в отладчике Yii нет записи с БД, т.е. кэш работает нормально.
Но вот когда я изменяю поле updated_at, все так же выводится из кэша, не выводятся измененные данные.
http://nimb.ws/21XJzb
BLOB и TEXT я не использую.
-
- Сообщения: 977
- Зарегистрирован: 2014.08.27, 21:54
Re: Кэширование, не срабатывает DbDependency
Перепроверьте
тут одно
$dep->sql = "SELECT MAX(updated_at) FROM user";
тут другое
return $db->createCommand('SELECT * FROM userlist WHERE id=1')->queryOne();
В какой таблице updated_at вы меняете?
тут одно
$dep->sql = "SELECT MAX(updated_at) FROM user";
тут другое
return $db->createCommand('SELECT * FROM userlist WHERE id=1')->queryOne();
В какой таблице updated_at вы меняете?
Re: Кэширование, не срабатывает DbDependency
я пользуюсь таблицей userlist
все перепроверил, все тоже не изменяются данные при изменении updated_at
Код: Выделить всё
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]);
}
Re: Кэширование, не срабатывает DbDependency
Код: Выделить всё
$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);
Re: Кэширование, не срабатывает DbDependency
У меня и ваш и мой вариант работает
Но это работает только с одной записью one(),
а мне надо all() - по всей таблице
Код: Выделить всё
$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);
а мне надо all() - по всей таблице
Re: Кэширование, не срабатывает DbDependency
Код: Выделить всё
$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);
Re: Кэширование, не срабатывает DbDependency
А у меня этот вариант не работает, вот с этим я задолбался
-
- Сообщения: 977
- Зарегистрирован: 2014.08.27, 21:54
Re: Кэширование, не срабатывает DbDependency
Вы выше до конца прочитали???
Попробуйте User::find()->limit(2)->all($db);Некоторые кэш хранилища имеют ограничение в размере данных. Например, Memcache ограничивает максимальный размер каждой записи до 1 Мб. Таким образом, если результат запроса превышает этот предел, данные не будут закешированы.
Ваш return User::find()->all($db); как бы намекает на это...
Re: Кэширование, не срабатывает DbDependency
Да читал.
Я использую
И у меня все кэшируется, я уже который раз говорю кэш работает нормально,
мне нужно чтобы, если я изменяю updated_at, то изменения показывались на экране,
этого не происходит, показывается только кэш.
DbDependency при one() работает, если all() не работает.
Я использую
Код: Выделить всё
'cache' => [
'class' => 'yii\caching\FileCache',
мне нужно чтобы, если я изменяю updated_at, то изменения показывались на экране,
этого не происходит, показывается только кэш.
DbDependency при one() работает, если all() не работает.