2017-10-23 19:13:30 5349次浏览 2条回答 0 悬赏 20 金钱
         $cache=Yii::$app->cache;
         if(!$cache->get('nba')){
             $depen=new \yii\caching\DbDependency(['sql'=>'select count(*) from yiiusertable']);
             $arr=['allen','nnn','iverson','six','nba'];
             $cache->delete('nba');
             $cache->add('nba',$arr,0,$depen);
         }else{
          print_r($cache->get('nba'));
         }

我使用数据依赖缓存,请问下这个$arr数组缓存后数据是保存在哪里?如果知道请给出绝对路径,我用的是basic2.0版本的,非常感谢!

最佳答案

  • johnny1991 发布于 2017-10-23 23:27 举报

    这个要看你的cache是怎么配置的,查看config,比如存在redis里面

    // redis cache
    'cache' => [
                'class' => 'yii\redis\Cache',
                'redis' => 'redis'
            ],
    // db cache
    'dbCache' => [
                'class' => 'yii\caching\DbCache',
                'cacheTable'=>'dts_cache',
            ],
    // file cache
    'fileCache' => [
                'class' => 'yii\caching\FileCache',
            ],
    
    11 条回复
    回复于 2017-10-24 10:34 回复
    'cache' => [
        'class' => 'yii\caching\FileCache',
    ]
    

    这么配置,那这数据缓存在哪个文件中?

    回复于 2017-10-24 11:26 回复

    默认存放在 public $cachePath = '@runtime/cache'; 这个路径下面,具体什么文件下面,参照源码yii\caching\FileCache

    // 这个$key就是你缓存的key
    protected function getCacheFile($key)
        {
            if ($this->directoryLevel > 0) {
                $base = $this->cachePath;
                for ($i = 0; $i < $this->directoryLevel; ++$i) {
                    if (($prefix = substr($key, $i + $i, 2)) !== false) {
                        $base .= DIRECTORY_SEPARATOR . $prefix;
                    }
                }
    
                return $base . DIRECTORY_SEPARATOR . $key . $this->cacheFileSuffix;
            } else {
                return $this->cachePath . DIRECTORY_SEPARATOR . $key . $this->cacheFileSuffix;
            }
        }
    
    回复于 2017-10-25 10:07 回复

    就是我的runtime下只有两个文件夹debug和logs,没有cache额

    回复于 2017-10-25 11:45 回复

    filecache会自动创建这个文件夹

    回复于 2017-10-25 16:45 回复

    cache这个文件夹没有存在 我查询了整个YII下的目录。

    回复于 2017-10-25 21:35 回复

    没有这个目录会在这个类初始化的时候自动创建这个目录,如果实在不行,你可以手动创建这个目录,源码参照yii\caching\FileCache

    public function init()
        {
            parent::init();
            $this->cachePath = Yii::getAlias($this->cachePath);
            if (!is_dir($this->cachePath)) {
                FileHelper::createDirectory($this->cachePath, $this->dirMode, true);
            }
        }
    
    回复于 2017-10-26 16:37 回复

    现在的情况是,系统没有创建这个cache目录,而我使用了框架自带的缓存,现在我在runtime下手动创建了cache这个文件夹,我又重新生成一遍缓存,但是这个cache目录下还是空的,那现在的问题就是这缓存的数据存在了哪里 ?

    回复于 2017-10-26 22:15 回复

    请把你项目里面所有的配置文件全部找一遍,你看看cache这个组件,配置了几次,从你的情况看起来,你应该是其他地方配置了cache组件,而且用的不是fileCache

    回复于 2017-10-30 16:15 回复

    系统只有一个配置文件,我使用缓存也是用的这个cache组件。

    回复于 2017-10-30 16:23 回复

    'cache' => [

    'class' => 'yii\caching\FileCache',
    

    ]使用的就是这个组件,无其他的配置文件,

    回复于 2017-11-03 10:19 回复

    我知道原因了,因为我用的phpstrom远程linux服务器写代码,生产缓存后并没有及时更新到本地,所以需要本地从服务器上下载下来,才有cache文件目录。十分感谢您的回答。

  • 回答于 2017-10-30 09:17 举报

    runtime

    6 条回复
    回复于 2017-10-30 16:23 回复

    runtime这个目录不存在

    回复于 2017-10-30 16:24 回复

    我说的不存在是没有这个数据的保存。

    回复于 2017-10-30 16:25 回复

    你说的是ruantime。那请问是哪个目录?

    回复于 2017-10-30 16:25 回复

    你说的是ruantime。那请问是哪个目录?

    回复于 2017-11-03 05:00 回复

    缓存请求 记录一些传参的目录下

    回复于 2017-11-03 10:19 回复

    我知道原因了,因为我用的phpstrom远程linux服务器写代码,生产缓存后并没有及时更新到本地,所以需要本地从服务器上下载下来,才有cache文件目录。十分感谢您的回复。

您需要登录后才可以回答。登录 | 立即注册
Allener
见习主管

Allener

注册时间:2017-10-04
最后登录:2017-11-15
在线时长:5小时46分
  • 粉丝0
  • 金钱245
  • 威望10
  • 积分395

热门问题