Задать вопрос
BadassRolf
@BadassRolf

Как кэшировать данные в Yii2?

Написал свой класс с выведением определенных данных из таблицы.
Как теперь их в этом же классе можно закэшировать и выводить с ключом?
Почитал документацию, не понял ничего.
Вроде нужно настроить компонент cache и выставить класс yii\caching\DbCache.
В итоге вообще запутался.
  • Вопрос задан
  • 972 просмотра
Подписаться 1 Оценить Комментировать
Пригласить эксперта
Ответы на вопрос 3
densisss
@densisss
Веб-разработчик.
Кэш вы можете использовать любого вида (File, DB, Memcached, Redis...). По умолчанию используется файловый кэш, для DB кэша нужно создавать таблицу в БД.

Пример кеша в view:
<?php if ($this->beginCache('_header')): ?>
    <header></header>
<?php
    $this->endCache();
endif;
?>


Пример в коде:
$response = \Yii::$app->cache->getOrSet('categoriesFilterHierarchy', function () { //ищу в кэше переменную с ключом 'categoriesFilterHierarchy', если не нахожу, то обращаюсь в БД и кеширую на 600 секунд 
            $categories = self::find()->orderBy('place ASC')->all();
            return $categories;
        },600);
Ответ написан
Tpona
@Tpona
Ужасный перфекционист
Таблицу создали?
CREATE TABLE cache (
    id char(128) NOT NULL PRIMARY KEY,
    expire int(11),
    data BLOB
);

Компонент для работы с кешем : Yii::$app->cache
В том месте, где получаете данные (из БД или еще откуда то), сначала проверьте нет ли данных в кеше:
Yii::$app->cache->exists("yourkey");
Если есть берите данные из кеша
$data = Yii::$app->cache->get("yourkey");
Если нет, берите данные откуда вы сейчас берете и тут же сохраняйте в кеш:
Yii::$app->cache->get("yourkey", $data);

Еще нужно учесть, что данные могут обновляться в первоисточнике и после обновления этих данных нужно сбрасывать кеш.

Вообще все довольно доступно и по-русски написано тут: https://yiiframework.com.ua/ru/doc/guide/2/caching...
Ответ написан
webinar
@webinar Куратор тега Yii
Учим yii: https://youtu.be/-WRMlGHLgRg
Написал свой класс с выведением определенных данных из таблицы

А чем стандартная модель не устроила? И раз уж Вы его написали - код дайте, что бы понять о чем мы говорим

и выводить с ключом

с каким ключом?

Вроде нужно настроить компонент cache

Да, в доках готовый пример есть:
www.yiiframework.com/doc-2.0/guide-caching-overvie...
'cache' => [
    'class' => 'yii\caching\DbCache',
    // 'db' => 'mydb',
    // 'cacheTable' => 'my_cache',
]


выставить класс yii\caching\DbCache

если хотите в базе хранить кеш - то да
www.yiiframework.com/doc-2.0/yii-caching-dbcache.html

В итоге вообще запутался.

Задавайте конкретные вопросы -распутаем
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы