`
hudeyong926
  • 浏览: 2017224 次
  • 来自: 武汉
社区版块
存档分类
最新评论

YII cache

 
阅读更多

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.动态内容

动态内容是指片段输出即使是在片段缓存包括的内容中也不会被缓存 。即使是包括的内容是从缓存中取出,为了使动态内容在所有时间是动态的,每次都得重新生成。出于这个原因,我们要求动态内容通过一些方法或函数生成。

分享到:
评论
2 楼 热血复兴 2012-06-23  
问一个CFileCache的问题啊,
http://www.yiiframework.com/doc/guide/1.1/zh_cn/caching.data,
这里提到“缓存的数据将一直留在缓存中,除非它由于某些缓存策略(例如缓存空间已满,旧的数据被删除)而被清除”,
我指定到'cachePath'=>'F:\WebRoot\vhost\yii\cache',
请问这里的缓存空间是怎么定义的?我F盘剩余的空间吗?只要我F盘没有满,就一直可以存吗
1 楼 热血复兴 2012-06-23  
  不错!希望能看到更多这方面的文章,国内Yii的中文资料,相对来说还是比较匮乏的!

相关推荐

    Yii_RedisCache

    Yii框架使用redis插件之一,提供给同学们一起学习

    yii2数据缓存 学习笔记

    yii 学习笔记,其中包括数据缓存、缓存组件、缓存过期、缓存依赖的理解及yii2数据缓存的测试代码

    swoft-yii2:swift的yii2-component

    此插件依赖于 实现已支持的组件yii2-db 易框架的 MySQL-Connect 、 ActiveRecord 等yii2-log 易框架的日志组件,推荐还是用 swoft-log 吧yii2-cache 易框架的缓存组件,安装环境要求swoft-v1.0 以上composer install...

    yii2-browser-info:Yii2扩展名。 提供有关浏览器的详细信息

    yii2-浏览器信息 Yii2扩展名。 提供有关浏览器的详细信息。... ./yii browser-info/update-cache 使用依赖注入来定义concrete实例: Yii :: $ container -&gt; set ( 'asu\browserinfo\BrowserInfo' ,

    yii2-redis:Yii 2 Redis扩展

    它包括一个Cache和Session存储处理程序,并实现ActiveRecord模式,该模式允许您将活动记录存储在Redis中。 有关许可证信息,请检查文件。 文档位于 。 要求 所有组件至少都需要redis版本2.6.12才能正常工作。 ...

    Yii清理缓存的方法

    本文实例讲述了Yii清理缓存的方法。分享给大家供大家参考,具体如下: html: 复制代码 代码如下:&lt;button onclick=”clearCache()”&gt;ClearCache&lt;/button&gt; js: function clearCache() { $.get('../eng/...

    yii2-sitemap-module

    配置应用程序配置文件的cache组件,例如: 'components' =&gt; [ 'cache' =&gt; [ 'class' =&gt; 'yii\caching\FileCache' , ],] 在应用程序配置文件的modules部分添加一个新模块,例如: 'modules' =&gt; [ 'sitemap' =&gt;

    Yii 2.0如何使用页面缓存方法示例

    前言 本文主要给大家介绍的是关于Yii2.0如何使用页面缓存的相关内容,分享出来供大家参考学习,下面来...use yii\caching\Cache; use yii\di\Instance; use yii\web\Response; use yii\filters\PageCache as PCache; /

    yii2缓存Caching基本用法示例

    'class' =&gt; 'yii\caching\ApcCache', ], 缓存的使用: &lt;?php $key = 'cacheKey'; //读取缓存 $data = Yii::$app-&gt;cache-&gt;get($key); //判断缓存是否存在,如果不存就生成缓存 if ($data === false) { $cache-&gt;...

    Yii数据库缓存实例分析

    本文实例讲述了Yii数据库缓存...Yii::app()-&gt;cache-&gt;set($key,$value,$outtime); //$key 唯一主键,$value 对应主键的值(可以是数组), $outtime 过期时间。 3、获取缓存 Yii::app()-&gt;cache-&gt;get($key); //设置数据

    core:Yii 3.0提案

    Yii 3.0提案::非实际使用 该软件包是Yii 3.0...yiisoft/cache caching文件夹中的所有内容,任何与PSR兼容的缓存都可以使用,并且可以独立于框架进行 yiisoft/db并非所有应用程序都需要它,可以独立于框架来完成 yii

    YII框架中使用memcache的方法详解

    本文实例讲述了YII框架中使用memcache的方法。分享给大家供大家参考,具体如下: yii中可以很方便的使用memcache 一.配置 在main.php的components中加入cache配置 array( 'components'=&gt;array( 'cache'=&gt;array( ...

    Yii框架应用组件用法实例分析

    本文实例讲述了Yii框架应用组件用法。分享给大家供大家参考,具体如下: ...例如,可以使用 \Yii::$app-&gt;db 来获取到已注册到应用的 DB connection, 使用 \Yii::$app-&gt;cache 来获取到已注册到应用的 p

    yii2-phpredis:Redis缓存和Yii2会话

    它在redis中包括一个Cache和Session存储处理程序。 注意:此REPO不支持活动记录。 要求 PHP&gt; = 5.4.0 Redis&gt; = 2.6.12 ext-redis&gt; = 2.2.7 Yii2〜2.0.4 安装 安装此扩展的首选方法是通过 。 无论运行 ...

    yii2-app:快速开发所需的只是我的高级模板(Docker,DB || Redis Cache,Gentelella Admin,Dektrium-User,log-db,queue-db,i18n,EmailForm,postcss,Gii Ant)~~~免费支持!~~~

    Yii2快速简单高级应用程序 Yii2-app是快速且​​可立即生产的高级项目模板。 Dockerized,用于开发(mysql,nginx,php-fpm) 请以获得更好的工作。 默认情况下,模板包括三层: frontend , backend和console ...

    yii-simplepie:Yii1.* 的 RSS 解析扩展

    yii-simplepie yii-simplepie 是用于解析 rss 提要的 yii 扩展: 简单派: simplepie 文档: 用法 在 yii 中安装扩展 ... 'set_cache_location' =&gt; Yii :: app ()-&gt; runtimePath . DIRECTORY_S

    Yii开启片段缓存的方法

    本文实例讲述了Yii开启片段缓存的方法。分享给大家供大家参考,具体如下: 1、main.php文件中的components中添加: cache'=&gt;array( 'class'=&gt;'system.caching.CFileCache', ), 2、在view中哪里需要缓存就添加这句...

    yii-tags-dependency:基于Yii框架的Dependency机制验证缓存相关性

    $ cache = \ Yii :: app ()-&gt; cache ; // save any value into cache with this dependency $ cache -&gt; set ( 'cacheKey' , 'cacheValue' , 0 , new TagsDependency ([ 'A' , 'B' ])); // check if th

Global site tag (gtag.js) - Google Analytics