【YII2学习笔记】20150724-3


一、数据缓存默认配置项 yii/config/web.php

$config = [
    'id' => 'basic',
    'basePath' => dirname(__DIR__),
    'bootstrap' => ['log'],
    'components' => [
        'request' => [
            // !!! insert a secret key in the following (if it is empty) - this is required by cookie validation
            'cookieValidationKey' => 'eddycjy19950728',
        ],
        'cache' => [
            'class' => 'yii\caching\FileCache',  //默认为文件储存
        ],


二、数据缓存组件引入

$cache = \YII:$app->cache;

三、操作数据缓存
yii\caching\Cache::get():通过一个指定的键(key)从缓存中取回一项数据。如果该项数据不存在于缓存中或者已经过期/失效,则返回值 false。
yii\caching\Cache::set():将一项数据指定一个键,存放到缓存中。
yii\caching\Cache::add():如果缓存中未找到该键,则将指定数据存放到缓存中。
yii\caching\Cache::mget():通过指定的多个键从缓存中取回多项数据。
yii\caching\Cache::mset():将多项数据存储到缓存中,每项数据对应一个键。
yii\caching\Cache::madd():将多项数据存储到缓存中,每项数据对应一个键。如果某个键已经存在于缓存中,则该项数据会被跳过。
yii\caching\Cache::exists():返回一个值,指明某个键是否存在于缓存中。
yii\caching\Cache::delete():通过一个键,删除缓存中对应的值。
yii\caching\Cache::flush():删除缓存中的所有数据。

//往缓存当中写数据
$cache->add('键值','数值',有效期);  //当缓存中已存在相同的键值时,后者不会叠加前者,值还是后者
//修改缓存中数据
$cache->set('键值','数值',有效期);
//删除缓存数据
$cache->delete('键值');
//清空缓存数据
$cache->flush();


四、缓存依赖

1.文件依赖

$dependency = new \yii\caching\FileDependency(['fileName' => '文件名字']);
$cache->add('键值','数据',有效期,$dependency);
$cache->set('键值', '数据', 30, $dependency);
$data = $cache->get('键值');

2.表达式依赖

$dependency = new \yii\caching\ExpressionDependency(

     ['expression'=>'\YII::$app->request->get("name")]'

);


3.DB依赖

$dependency = new \yii\caching\DbDependency(

     ['sql' => SQL语句]

);


4.链式依赖

5.组依赖


下面是可用的缓存依赖的概况:

yii\caching\ChainedDependency:如果依赖链上任何一个依赖产生变化,则依赖改变。
yii\caching\DbDependency:如果指定 SQL 语句的查询结果发生了变化,则依赖改变。
yii\caching\ExpressionDependency:如果指定的 PHP 表达式执行结果发生变化,则依赖改变。
yii\caching\FileDependency:如果文件的最后修改时间发生变化,则依赖改变。
yii\caching\GroupDependency:将一项缓存数据标记到一个组名,你可以通过调用 yii\caching\GroupDependency::invalidate() 一次性将相同组名的缓存全部置为失效状态。


五、查询缓存

$db = new yii\db\Connection();

查询缓存有两个通过 yii\db\Connection 设置的配置项:
yii\db\Connection::queryCacheDuration: 查询结果在缓存中的有效期,以秒表示。如果在调用 yii\db\Connection::beginCache() 时传递了一个显式的时值参数,则配置中的有效期时值会被覆盖。
yii\db\Connection::queryCache: 缓存应用组件的 ID。默认为 'cache'。只有在设置了一个有效的缓存应用组件时,查询缓存才会有效。


六、片段缓存

存在该缓存则返回FALSE进行读取,否则不存在则TRUE进行缓存

if ($this->beginCache('键值',有效期)) {
    //有效期默认为0,则为永不过期
    // ... 内容 ...

    $this->endCache();
}

/*
 * 设置缓存配置
*/
$dependency = [
    'class' => 'yii\caching\DbDependency',        //使用的缓存依赖类型
    'sql' => 'SELECT MAX(updated_at) FROM post',  //所缓存的sql语句
];

if ($this->beginCache($id, ['dependency' => $dependency])) {

    // ... 在此生成内容 ...

    $this->endCache();
}

//缓存开关
$enable = true;

if ($this->beginCache($id, ['enable' => $enable])) {

    // ... 在此生成内容 ...

    $this->endCache();
}

如果缓存中存在该内容,yii\base\View::beginCache() 方法会将已缓存内容输出。

否则,若不存在该缓存,则生成逻辑,生成的内容将存储在缓存中。

*片段缓存嵌套,需要注意内外的有效期导致的问题。


七、页面缓存

public function behaviors(){
        return [
            [
                   'class' => 'yii\filters\PageCache',      //页面缓存
                   'duration' =>1000,                       //有效期
                   'only'         =>['index','test'],       //仅在该控制器(index,test)执行页面缓存
                   'dependency' =>[
                               'class' =>'yii\caching\FileDependency',           //使用的缓存依赖方式
                               'fileName' =>'hw.txt'                             //缓存的文件(注 当文件修改后,缓存也同时失效)
                    ]
            ]
        ];
}

public function actionIndex(){
           echo "我是被缓存的";
}




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值