Yii2缓存失效

3
我在我的前端/SiteController.php中有这段代码。
public function actionPage($slug = 'home') {
    Url::remember();
    $val = Yii::$app->cache->getOrSet($slug, function() use ($slug) {
        $model = DBMenu::find()->with('pagesTranslations')->where(['slug' => $slug])->one();
        if ($model === null) {
            return $this->redirect(['/site/page', 'slug' => 'home']);
        }
        return $model;
    }, 0, new TagDependency(['tags' => 'page']));

    $searchModel = new Search();
    return $this->render('page',[
        'model' => $val,
        'searchModel' => $searchModel
    ]);
}

这段代码位于backend/PageController.php文件中

public function actionTest() {
    TagDependency::invalidate(Yii::$app->cache, 'page');
}

在我执行'test'操作之后,进入了site/page?slug=home页面,但在日志中看到数据库计数为50,而应该是68。为什么invalidate方法不起作用?
编辑: 在common/config/main.php中,缓存设置如下:
'cache' => [
    'class' => 'yii\caching\FileCache',
],

它能与经典缓存设置一起使用吗?我的意思是像这样:$val = Yii::$app->cache->get(...); if ($val === false) { $val = ...; Yii::$app->cache->set(...); }。为什么在闭包内部进行重定向? - Bizley
即使这样也不起作用 @Bizley - Marko Mikulić
你需要检查缓存是否已经保存。顺便说一句,将整个模型缓存起来并不是一个好主意。 - Bizley
我觉得问题在于前端与后端没有共享缓存。有没有办法进行配置?我在文档中找不到解决方案。 - Marko Mikulić
1
使用cachePath配置缓存。默认情况下,它的值为'cachePath' => '@runtime/cache'。您可以设置@frontend/runtime/cache,将所有缓存存储在前端文件夹中。 - Bizley
1个回答

0

这个问题(以及 https://github.com/yiisoft/yii2/issues/15350)可能与 FileCache 以及网页和控制台应用程序的不同缓存位置有关 - 这更像是配置错误而不是框架错误。https://github.com/yiisoft/yii2-redis/issues/156 听起来像是 exists() 的已知 bug,但对于 get() 应该正常工作 - 如果你在使用 get() 时遇到问题,提供一些可重现的示例可能有助于解决你的问题。 - rob006

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接