1.数据缓存
常见的缓存操作方法get,set,add,delete,flush默认的缓存文件保存到protected/runtime/目录。
ApcCache扩展配置
第一步:下载php_apc.dll 在http://downloads.php.net/pierre/
第二步:让php.ini支持apc扩展模块。
将php_apc.dll放入你的ext目录,然后打开php.ini 加入:
- extension=php_apc.dll
- apc.rfc1867 = on
- apc.max_file_size = 100M
- upload_max_filesize = 100M
- post_max_size = 100M
- apc.slam_defense = 0
- apc.write_lock = 1
在配置文件中配置缓存,可以配置多个。代码如下
- 'ApcCache'=>array(
- 'class'=>'CApcCache',
- ),
- 'Dbcache'=>array(
- 'class'=>'CDbCache',
- ),
- 'FileCache'=>array(
- 'class'=>'CFileCache',
- 'cachePath'=> '/Webroot/trackstar/protected/runtime/cache/test',
- ),
- 'MemCache'=>array(
- 'class'=>'CMemCache',
- 'servers'=>array(
- array(
- 'host'=>'server1',
- 'port'=>11211,
- 'weight'=>60,
- ),
- array(
- 'host'=>'server2',
- 'port'=>11211,
- 'weight'=>40,
- ),
- ),
- ),
session cache在开启apc cache时可以用,它将seesion存到apc中比存到文件中要快
- 'cache' => array(
- 'class' => 'CApcCache',
- ),
- 'session' => array(
- 'class' => 'CCacheHttpSession',
- ),
yii如果要使用session.save_handler=memcache 如果需要扩展自定义的session管理方法 ,仅仅需要继承CHttpSession, 重写openSession,readSession,writeSession, destroySession,gcSession 这五个方法即可,见附件
--------------------------------------------------------------------------------------
| 这种配置component的方式非常灵活。
| Yii的webapp,继承了CModule,而CModule重写了__set,__get
| 魔术方法,他们的作用就是针对应用配置文件中对未知component
| 名称的设置和调用。非常灵活。系统只是约定了一组coreComponent
| 的调用方式。如getCache,getDb ,等。
--------------------------------------------------------------------------------------
为了调试,有时需要知道当前用户的session ID,
该值就在 Yii::app()->session->sessionID 中。
最后,当用户退出登录(logout),你需要消除痕迹,可使用:
Yii::app()->session->clear() 移去所有session变量,然后,调用
Yii::app()->session->destroy() 移去存储在服务器端的数据。
通过以下方式调用
Yii::app()->FileCache;
Yii::app()->Dbcache;
存取,设置缓存,也很简单
$cacheObj->set($key,$value,$expire);
$cacheObj->get($key);
$cache=Yii::app()->cache;
$cache['var1']=$value1; // 相当于: $cache->set('var1',$value1);
$value2=$cache['var2']; // 相当于: $value2=$cache->get('var2');
CDbConnection::cache()
- $sql = 'SELECT * FROM tbl_post LIMIT 20';
- $dependency = new CDbCacheDependency('SELECT MAX(update_time) FROM tbl_post');
- $rows = Yii::app()->db->cache(1000, $dependency)->createCommand($sql)->queryAll();
CActiveRecord::cache()
- $dependency = new CDbCacheDependency('SELECT MAX(update_time) FROM tbl_post');
- $posts = Post::model()->cache(1000, $dependency)->findAll();
2.片段缓存
片段缓存指缓存网页某片段,要使用片段缓存,在控制器视图脚本中调用CController::beginCache() 和CController::endCache() 。这两种方法开始和结束包括的页面内容将被缓存。
- <?php if($this->beginCache('part',array('cacheID'=>'ApcCache','varyByParam'=>array('pid','nid')))) { ?>
- this is part test cache<br>
- <?php $this->endCache(); } ?>
其中part是缓存后的$key值,this is part test cache<br>是缓存后的$value值,cacheID是main.php中的配置,默认是cache,不需要
3.页面缓存
页面缓存指的是缓存整个页面的内容。
- public function filters(){
- return array(
- array(
- 'COutputCache+index',
- 'duration' => 120,
- 'cacheID' => 'MemCache',
- 'varyByParam'=>array('id'),
- ),
- );
- }
其中大家可以看到 COutputCache+index,这里的意思是使用COutputCache类缓存文件,后面的加index指的是只缓存actionIndex函数,如果你需要缓存其他的就继续增加COutputCache+index,hello,test…如果没有后面的+那么默认是缓存整个控制器里面的所有方法 ,该filter配置为利用COutputCache过滤器来缓存整个被应用程序
varyByParam是我们之前提起过的一种很重要的可选项。为了给你减轻压力,减少编写标识被缓存内容key的工作量,该功能允许key被框架自动控制。也就是说,通过指定一系列来自GET参数中的名称。当我们开始请求时,系统将会很好的使用该id作为唯一key的一部分来生成缓存内容。通过指定'varyByParam'=> array('id'),COutputCache为我们完成了基于输入请求字符串中id的余下工作 。这里有很多可选项,在我们使用 COutputCache来缓存数据时,来作为自动生成key名字的策略。下面是可以使用的一个列表:
- varyByRoute:通过将该选项设置为true,具体请求的路由部分将会作为独立标识符的一部分用于生成缓存数据。所以,你可以使用请求controller和acion的组合来区别缓存内容。
- varyBySession:通过设置该选项为true,将使用唯一的session id来区分缓存中的内容。每个用户的session都是不同的,但是可以用来为缓存服务。
- varyByParam:如前面所说,这里是用输入的GET中的参数来区分缓存内容。
- varyByExpression:给该选项设置PHP表达式,我们可以使用相应表达式的结果来区分缓存的内容。
所以,当在ProjectController类中配置了上面的过滤器后,每次针对某个项目的请求内容都会被缓存,并且在2分钟后刷新缓存。你可以通过先缓存一个项目的细节,然后使用某种方法刷新缓存来查看。所有的更新都会在其生存周期结束后才可以观察到。
缓存全部页面内容是极大提升性能的一种方式,但是对每一个应用程序中的每一个页面进行缓存没有意 义。做一个上面3种方式的总结:数据,片段和页面缓存,在大多数真实的项目中是需要的。我们只简单的了解了一下Yii中提供的缓存功能。希望这能为你迅速 看清Yii的缓存功能提供助力。
4.动态内容
动态内容是指片段输出即使是在片段缓存包括的内容中也不会被缓存 。即使是包括的内容是从缓存中取出,为了使动态内容在所有时间是动态的,每次都得重新生成。出于这个原因,我们要求动态内容通过一些方法或函数生成。