2015-07-06 14:51:34 8501次浏览 3条回答 0 悬赏 100 金钱
public function actionIndex(){ 
        return $this->render('index');
}
public function behaviors()
{
        return [
            'pageCache' => [
                'class' => 'yii\filters\PageCache',
                'only' => ['index'],
                'duration' => 60,
                'dependency' => [
                    'class' => 'yii\caching\DbDependency',
                    'sql' => 'SELECT COUNT(*) FROM c_ProductList',
                ],
                'variations' => [
                    \Yii::$app->language,
                ]
            ],
        ];
}

以上是我控制器的放法及缓存设置.
问题:
1.我不知道缓存成功了没有,因为没有报错.
2.如果缓存成功,请问缓存的文件保存在哪里.
3.缓存的文件可以自定义吗?

  • 回答于 2015-07-06 15:50 举报

    可以去web/assets这个目录下看看,都是缓存文件,可以删掉的。
    还有其他缓存形式,例如mongo、memcache、redis等,有专门的工具去查看的。
    可以自定义的。

    4 条回复
    回复于 2015-07-06 18:01 回复

    缓存的文件是保存在 runtime/cache

    回复于 2015-07-07 07:46 回复

    对,assets下是前端缓存文件。

    回复于 2015-07-07 09:51 回复

    assets下面也没有生成缓存文件,这个代码有没有问题呢

    回复于 2015-07-07 11:44 回复

    发下代码看看

  • 回答于 2015-07-06 22:01 举报

    1、看是否有缓存:
    方法一:看缓存文件
    先关闭页面缓存,删除runtime/cache下的所有缓存,刷新页面,观察生成了几个缓存文件。
    然后打开页面缓存,再次刷新页面,观察是否有更多的缓存文件生成,如果有,缓存成功。
    方法二:看调试信息
    如果你有打开debug面板,那么在你访问的页面缓存生效期间,不管刷新几次页面,下方的debug面板上的参数(页面加载时间/time,数据库查询时间/DB time,等)是不会变化的,因为这个值是被缓存页面的信息。
    如果没有缓存,这些参数是会有波动。

    2、如果缓存成功,文件会是runtime/cache目录下

    3、缓存文件不能自定义,这个是系统底层做的事,不用你干预,你只管用就行了。
    你能定义的是缓存的变量名,如果你只需缓存部分数据
    写缓存$cache->set($key, $data)
    读缓存$data = $cache->get($key);
    至于缓存文件具体在哪个位置,与你无关。
    比如你存¥100到支付宝,不用关心这¥100具体在放哪了,只要账号密码对了,在哪都能买¥100的东西。

    6 条回复
    回复于 2015-07-07 09:51 回复

    你好!我看了,没有生成缓存文件呢.我这代码有问题吗?

    回复于 2015-07-07 09:55 回复


    先把return改成最简配置,能生效再一点点加配置上去。

    return [
              [
                    'class' => 'yii\filters\PageCache',
                    'only' => ['index'],
                    'duration' => 60,
                    ],
            ];
    
    回复于 2016-04-20 20:53 回复

    hi请问下,目前return已经配置成最简单的,但是还是没有runtime/cache这个文件目录。
    其次看了debug,每次刷新页面都有执行数据库,应该是缓存没有生效。不知道还有哪里有问题呢?

    回复于 2016-04-21 09:18 回复

    debug里边每次都有数据库查询记录的,你要看debug面板上的参数(页面加载时间/time,数据库查询时间/DB time,等)是否有变化.没有变化说明缓存成功.

    回复于 2016-04-21 09:30 回复


    09:27:09.129 16.2 ms SELECT SELECT FROM goods WHERE ((deleted=0) AND (shelves=1)) AND (price > 0)
    1 09:28:28.510 14.8 ms SELECT SELECT
    FROM goods WHERE ((deleted=0) AND (shelves=1)) AND (price > 0)
    我按f5刷新了页面,看了debug里面的参数,还是又执行新的数据库查询。 求大神指点下

    回复于 2016-04-21 09:56 回复

    建议仔细学习下文档:http://www.yiichina.com/doc/guide/2.0/caching-overview 我没有研究过这个东西,所有的经验都是基于默认配置来的,配置的问题经验不足.

    觉得很赞
  • 回答于 2016-12-30 09:08 举报

    建议开启debug,看下页面的运行时间,如果缓存成功,时间会缩短5倍以上。

您需要登录后才可以回答。登录 | 立即注册
农民的孩子
副总裁

农民的孩子 成都

注册时间:2015-01-07
最后登录:2019-09-23
在线时长:15小时8分
  • 粉丝6
  • 金钱9320
  • 威望0
  • 积分9470

热门问题