最新公告
  • 欢迎您光临波比源码,本站秉承服务宗旨 履行“站长”责任,销售只是起点 服务永无止境!立即加入我们
  • ThinkPHP3.1快速入门(10)缓存

    在项目中,合理的使用缓存对性能有较大的帮助。ThinkPHP提供了方便的缓存方式,包括数据缓存、静态缓存和查询缓存等,支持包括文件方式、APC、Db、Memcache、Shmop、Sqlite、Redis、Eaccelerator和Xcache在内的动态数据缓存类型,以及可定制的静态缓存规则,并提供了快捷方法进行存取操作。

    数据缓存

    在ThinkPHP中进行缓存操作,一般情况下并不需要直接操作缓存类,因为系统内置对缓存操作进行了封装,3.1版本推荐的数据缓存方法是cache方法,基本的用法是:
    3.1.2版本cache方法已经并入S方法,所以cache方法不再建议使用,直接使用S方法即可,和下文描述的cache方法用法一致

    1缓存初始化

    cache(array(‘type’=>’xcache’,’expire’=>60));

    缓存初始化可以支持的参数根据不同的缓存方式有所区别,常用的参数是:

    expire 缓存有效期(时间为秒) prefix 缓存标识前缀 type 缓存类型

    核心版本只有File缓存方式的支持,其他的缓存方式支持需要下载单独的缓存驱动,并放入系统目录的Extend/Driver/Cache/下面,否则会出现不支持缓存类型的错误提示。

    有些缓存方式会有一些自身特殊的参数,例如Memcache缓存,还需要配置其他的参数:

    cache(array(‘type’=>’memcache’,’host’=>’192.168.1.10′,’port’=>’11211′,’prefix’=>’think’,’expire’=>60));

    对于全局的缓存方式,一般我们建议添加prefix(缓存前缀)参数用以区分不同的应用,以免混淆。

    2缓存设置

    cache(‘a’,$value);

    会按照缓存初始化时候的参数进行缓存数据,也可以在缓存设置的时候改变参数,例如:

    cache(‘a’,$value,300);// 缓存数据300秒

    甚至改变之前的缓存方式或者更多的参数:

    cache(‘a’,$value,array(‘type’=>’file’,’expire’=>300));// 采用文件方式缓存数据300秒

    如果你在缓存设置的时候采用上面的数组方式传入参数的话,会影响到后面的缓存存取。

    3缓存读取

    $value = cache(‘a’);

    缓存读取的是前面缓存设置的值,这个值会受缓存初始化或者缓存设置的时候传入的参数影响。
    如果缓存标识不存在或者已经过期,则返回false,否则返回缓存值。

    4缓存删除

    cache(‘a’,null);

    删除缓存标识为name的缓存数据。

    如果要切换缓存方式,可以再次进行缓存初始化操作或者使用下面的方式:

    $cache = cache(array(‘type’=>’xcache’,’prefix’=>’think’,’expire’=>600));
    $cache->name = ‘value’; // 设置缓存
    $value = $cache->name; // 获取缓存
    unset($cache->name); // 删除缓存

    如果你设置了缓存前缀的话,对应的缓存操作只是对应该缓存前缀标识的,不会影响其他的缓存。
    数据缓存可以支持缓存队列,简单的说就是可以限制缓存的数量,只需要在初始化的时候指定length参数:

    cache(array(‘type’=>’xcache’,’length’=>100,’expire’=>60));

    设置了length参数后,系统只会缓存最近的100条缓存数据。

    快速缓存

    如果你仅仅是希望用文件的方式缓存一些简单的数据,并且没有有效期的概念,那么系统还提供了一个快速缓存方法F可以用来更快的操作。
    快速缓存Data数据,默认保存在DATA_PATH目录下面

    F(‘data’,$Data);

    快速缓存Data数据,保存到指定的目录

    F(‘data’,$Data,TEMP_PATH);

    获取缓存数据

    $Data = F(‘data’);

    删除缓存数据

    F(‘data’,NULL);

    F方法支持自动创建缓存子目录,在DATA_PATH目录下面缓存data数据,如果User子目录不存在,则自动创建:

    F(‘User/data’,$Data);

    3.1.2版本开始F方法支持使用通配符批量删除功能,使用如下:

    F(‘User/*’,NULL);

    表示删除DATA_PATH.’User/’目录下面的数据缓存。
    系统内置的数据字段信息缓存就是用了快速缓存机制。

    查询缓存

    对于及时性要求不高的数据查询,我们可以使用查询缓存功能来提高性能,而且无需自己使用缓存方法进行缓存和获取。
    查询缓存功能支持所有的数据库,并且支持所有的缓存方式和有效期。
    在使用查询缓存的时候,只需要调用Model类的cache方法,例如:

    $Model->cache(true)->select();

    如果使用了cache(true),则在查询的同时会根据当前的查询SQL生成查询缓存,默认情况下缓存方式采用DATA_CACHE_TYPE参数设置的缓存方式(系统默认值为File表示采用文件方式缓存),缓存有效期是DATA_CACHE_TIME参数设置的时间,也可以单独制定查询缓存的缓存方式和有效期:

    $Model->cache(true,60,’xcache’)->select();

    表示当前查询缓存的缓存方式为xcache,并且缓存有效期为60秒。
    同样的查询,如果没有使用cache方法,则不会获取或者生成任何缓存,即便是之前调用过Cache方法。
    查询缓存只是供内部调用,如果希望查询缓存开放给其他程序调用,可以指定查询缓存的Key,例如:

    $Model->cache(‘cache_name’,60)->select();

    则可以在外部通过S方法直接获取查询缓存的内容,

    $value = S(‘cache_name’);

    除了select方法之外,查询缓存还支持find和getField方法,以及他们的衍生方法(包括统计查询和动态查询方法)。具体应用的时候可以根据需要选择缓存方式和缓存有效期。

    静态缓存

    要使用静态缓存功能,需要开启HTML_CACHE_ON参数,并且使用HTML_CACHE_RULES配置参数设置静态缓存规则文件。
    静态规则的定义方式如下:

    ‘HTML_CACHE_ON’=>true, // 开启静态缓存
    ‘HTML_FILE_SUFFIX’  =>  ‘.shtml’, // 设置静态缓存后缀为.shtml
    ‘HTML_CACHE_RULES’=> array(
        ‘ActionName(小写)’            => array(‘静态规则’, ‘静态缓存有效期’, ‘附加规则’), 
        ‘ModuleName(小写)’            => array(‘静态规则’, ‘静态缓存有效期’, ‘附加规则’), 
        ‘ModuleName(小写):ActionName(小写)’ => array(‘静态规则’, ‘静态缓存有效期’, ‘附加规则’),
        ‘*’                     => array(‘静态规则’, ‘静态缓存有效期’, ‘附加规则’),
        //…更多操作的静态规则
    )

    静态缓存文件的根目录在HTML_PATH定义的路径下面,并且只有定义了静态规则的操作才会进行静态缓存。
    第一种是定义全局的操作静态规则,例如定义所有的read操作的静态规则为:

    ‘read’=>array(‘{id}’,’60’)

    其中,{id}表示取$_GET[‘id’]为静态缓存文件名,第二个参数表示缓存60秒
    第二种是定义全局的模块静态规则,例如定义所有的User模块的静态规则为:

    ‘user:’=>array(‘User/{:action}_{id}’,’600′)

    其中,{:action}表示当前的操作名称
    第三种是定义某个模块的操作的静态规则,例如,我们需要定义Blog模块的read操作进行静态缓存

    ‘blog:read’=>array(‘{id}’,0)

    有个别特殊的规则,例如空模块和空操作的静态规则的定义,可以使用下面的方式:

    ’empty:index’=>array(‘{:module}_{:action}’,0)  // 定义空模块的静态规则
    ‘User:_empty’=>array(‘User/{:action}’,0)  // 定义空操作的静态规则

    第四种方式是定义全局的静态缓存规则,这个属于特殊情况下的使用,任何模块的操作都适用,例如

    ‘*’=>array(‘{$_SERVER.REQUEST_URI|md5}’),

    根据当前的URL进行缓存

    静态规则是用于定义要生成的静态文件的名称,静态规则的定义要确保不会冲突,写法可以包括以下情况:
    1、使用系统变量包括_GET_REQUEST_SERVER_SESSION_COOKIE
    格式:
    {$_×××|function}

    例如:

    {$_GET.name} 
    {$_SERVER. REQUEST_URI|md5}

    2、使用框架特定的变量
    例如:{:app}、{:group}、{:module}和{:action}分别表示当前项目名、分组名、模块名和操作名。

    3、使用_GET变量
    {var|function}也就是说{id}其实等效于{$_GET.id}

    4、直接使用函数
    {|function}例如:

    {|time}

    5、支持混合定义,例如我们可以定义一个静态规则为:

    ‘{id},{name|md5}’ 

    在{}之外的字符作为字符串对待,如果包含有”/”,会自动创建目录。
    例如,定义下面的静态规则:

    {:module}/{:action}_{id}

    则会在静态目录下面创建模块名称的子目录,然后写入操作名_id.shtml文件。
    静态有效时间单位为秒。如果不定义,则会获取配置参数HTML_CACHE_TIME的设置值,如果定义为0则表示永久缓存。
    附加规则通常用于对静态规则进行函数运算,例如

    ‘read’=>array(‘Think{id},{name}’,’60’, ‘md5’) 

    翻译后的静态规则是md5(‘Think’.$_GET[‘id’].’,’.$_GET[‘name’]);
    和静态缓存相关的配置参数包括:

    HTML_CACHE_ON 是否开启静态缓存功能
    HTML_FILE_SUFFIX 静态文件后缀 惯例配置的值是 .html
    HTML_CACHE_TIME 默认的静态缓存有效期 默认60秒 可以在静态规则定义覆盖

    总结

    要善于利用ThinkPHP的缓存功能,更重要的是区分什么时候用何种缓存方式更加有效。缓存也不是万能的,没有缓存是万万不能的^_^

    波比源码 – 精品源码模版分享 | www.bobi11.com
    1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长!
    2. 分享目的仅供大家学习和交流,您必须在下载后24小时内删除!
    3. 不得使用于非法商业用途,不得违反国家法律。否则后果自负!
    4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
    5. 如有链接无法下载、失效或广告,请联系管理员处理!
    6. 本站资源售价只是赞助,收取费用仅维持本站的日常运营所需!
    7. 如遇到加密压缩包,请使用WINRAR解压,如遇到无法解压的请联系管理员!

    波比源码 » ThinkPHP3.1快速入门(10)缓存

    常见问题FAQ

    免费下载或者VIP会员专享资源能否直接商用?
    本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。
    提示下载完但解压或打开不了?
    最常见的情况是下载不完整: 可对比下载完压缩包的与网盘上的容量,若小于网盘提示的容量则是这个原因。这是浏览器下载的bug,建议用百度网盘软件或迅雷下载。若排除这种情况,可在对应资源底部留言,或 联络我们.。
    找不到素材资源介绍文章里的示例图片?
    对于PPT,KEY,Mockups,APP,网页模版等类型的素材,文章内用于介绍的图片通常并不包含在对应可供下载素材包内。这些相关商业图片需另外购买,且本站不负责(也没有办法)找到出处。 同样地一些字体文件也是这种情况,但部分素材会在素材包内有一份字体下载链接清单。
    波比源码
    一个高级程序员模板开发平台
    升级波友尊享更多特权立即升级