Кэширование страниц yii2 для отдельных сообщений

У меня есть блог через yii2 и кеширование страниц

    'class' => 'yii\filters\PageCache',
    'only' => ['view','video'],
    'duration' => 900,
    'dependency' => [
        'class' => 'yii\caching\DbDependency',
         'sql' => '?',
    ],

моя почтовая таблица имеет первичный ключ как идентификатор; как установить sql как отдельный кеш страницы для каждого идентификатора сообщения? спасибо парень.


person kiamoz    schedule 04.08.2017    source источник
comment
Вы видели Руководство?   -  person Bizley    schedule 04.08.2017
comment
Да, я вижу, но я не могу передать ему текущий идентификатор,   -  person kiamoz    schedule 04.08.2017
comment
Я думаю, что он не предназначен для страниц, зависящих от параметров. Вы пытались переопределить yii\filters\PageCache и поиграть с beforeAction()?   -  person Bizley    schedule 04.08.2017
comment
Вы сказали, что я не могу использовать кеш на страницах просмотра отдельных сообщений с помощью настройки Yii по умолчанию?   -  person kiamoz    schedule 04.08.2017
comment
Нет, я этого не говорил. Вы можете, но похоже, что вам нужно проделать дополнительную работу, чтобы сделать это.   -  person Bizley    schedule 04.08.2017


Ответы (1)


Просто передайте ему текущий идентификатор, и да, вы можете это сделать, используйте включенное свойство и вариант, подобный этому.

[
            'enabled' => Yii::$app->request->isGet && Yii::$app->user->isGuest,
            'class' => 'yii\filters\PageCache',
            'only' => ['index'],
            'duration' => 900,
            'variations' => [
                Yii::$app->request->get('id')
            ]
]

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

Вы даже можете использовать более продвинутую конфигурацию, если хотите, например. динамический заполнитель с кешем страниц, чтобы разрешить кеширование даже для аутентифицированных пользователей, просто проверьте документы.

person Programista    schedule 08.08.2017
comment
да работа очень приятная! сейчас тестирую. до этого я использовал кеширование фрагментов для кеша боковой панели (потому что моя боковая панель очень тяжелая в mysql), и только одно сообщение поста обновляется из mysql, и я думаю, что это не имеет значения, кэшировать это или нет, но знаю, что это очень важно для сервера и mysql чтобы не получать новые данные для каждого пользователя при большом времени посещения и больших данных. - person kiamoz; 11.08.2017
comment
Если вы отключите кеш для зарегистрированных пользователей, я все равно буду использовать кеш фрагментов для боковой панели, если вы не можете использовать кеш страниц для таких пользователей. Или, лучше, измените все данные пользователя на кеш фрагментов и кеш страниц все время. - person Programista; 11.08.2017
comment
да, это правда, у меня есть вопрос. если вариации кеша становятся такими же большими, как и наши сообщения в базе данных, это не вызывает проблемы? - person kiamoz; 11.08.2017
comment
Зависит от трафика и сервера, у вас есть продолжительность 900, поэтому через 15 минут все они удаляются, только те, которые были посещены, регенерируются, одна страница сообщения может иметь много размеров, зависит от того, в среднем 300 КБ вы уместили бы около 340 страниц размером 100 МБ, 1 ГБ = 3400 кэшированных страниц. На диске или там, где вы хотите, вы можете изменить поставщика кеша для pagecache на кеш redis, если можете и хотите (диск по умолчанию). Вы всегда можете сжать страницы кеша страниц, если это будет проблемой, но это требует большой работы. Это зависит от того, сколько страниц будет посещено ежедневно и есть ли у вас место на диске для кеша. (или память) - person Programista; 11.08.2017
comment
большая помощь и спасибо за все ваши слова, эта тема немного продвинулась, и мало кто посещал ее, спасибо за ваше внимание тоже. пока - person kiamoz; 12.08.2017
comment
Уважаемый сэр, в этом случае я использовал счетчик для подсчета просмотров сообщений, и теперь с кешем страниц это не работает, вы имеете представление об этом? Я должен использовать кеш фрагментов? - person kiamoz; 12.08.2017
comment
Да, если вы хотите, чтобы значение обновлялось. - person Programista; 12.08.2017