浅析ThinkPHP缓存之快速缓存(F方法)和动态缓存(S方法)(日常整理)

系统默认的缓存方式是采用File方式缓存,我们可以在项目配置文件里面定义其他的缓存方式,例如,修改默认的缓存方式为Xcache(当然,你的环境需要支持Xcache)

对于File方式缓存下的缓存目录下面因为缓存数据过多而导致存在大量的文件问题,ThinkPHP也给出了解决方案,可以启用哈希子目录缓存的方式。

'DATA_CACHE_SUBDIR'=>true

还可以设置哈希目录的层次,例如

'DATA_PATH_LEVEL'=>2

就可以根据缓存标识的哈希自动创建多层子目录来缓存。

S方法支持缓存有效期,在很多情况下,可能我们并不需要有效期的概念,或者使用文件方式的缓存就能够满足要求,所以系统还提供了一个专门用于文件方式的快速缓存方法F方法。F方法只能用于缓存简单数据类型,不支持有效期和缓存对象,使用如下:

//快速缓存Data数据,默认保存在DATA_PATH目录下面   
      F('data',$data);
    //快速缓存Data数据,保存到指定的目录  
      F('data',$data,TEMP_PATH);
      F('user/data',$data);
    //删除缓存数据
      F('data',null);
    //获取缓存数据
      $data=F('data');

配置文件config.php

//动态缓存,缓存文件存在于\Runtime\Temp
'DATA_CACHE_TYPE'=>'file',
'DATA_CACHE_TIME'=>'3600',
//'DATA_CACHE_SUBDIR'=>true,//开启子目录
//'DATA_CACHE_LEVEL'=>3,//设置子目录的层次

Action文件:

 function view(){
    //缓存
    //$cache=Cache::getInstance('缓存方式','缓存参数');
    //$cache=Cache::getInstance('Xcache',array('expire'=>60));
    //$cache->set('名字','值');或者$cache->name='值';
    //$value=$cache->get('名字');或者$value=$cache->name;
    //$cache->rm('名字');或者unset($cache->name);
    //S('名字','数据','3600','类型')缓存快捷方法
    $user=M('haodetong');
    $value=S('list');
    if(empty($value)){
      $list=$user->select();
      S('list',$list,3600);
      echo '这个是直接从数据库中读取的文件';
      dump($list);
    }else{
      echo '这个是缓存文件';
      dump($value);
    }
  }

第一次访问时如下图:

再次刷新后如下图:

下面给大家单独介绍ThinkPHP 中F 方法的快速缓存

使用文件方式的缓存就能够满足要求,所以系统还提供了一个专门用于文件方式的快速缓存方法F方法

$path="../Public/Runtime/";
$str="asdfasdfasdaaaaaaaaaaaaaaaaaaaaaa";
F("str/andy",$str,$path);

这样就把 $str 字符串这个内容放在了 ../Public/Runtime/str/andy.php  的文件中了

andy.php 的文件内容如下:

<?php
return 'asdfasdfasdaaaaaaaaaaaaaaaaaaaaaa';
?>

下面一段代码是ThinkPHP缓存方法S()概述

thinkPHP的F方法只能用于缓存简单数据类型,不支持有效期和缓存对象。S()缓存方法支持有效期,又称动态缓存方法,使用示例如下:

代码如下:

代码如下:

// 使用data标识缓存$Data数据
S('data',$Data);  //前面的是缓存标示,后面的是缓存的数据

代码如下:

// 缓存$Data数据3600秒
S('data',$Data,3600);

代码如下:

代码如下:

// 删除缓存数据
S('data',NULL);  //第一个参数时缓存的标识名

代码如下:

$cache=S($cachename);//设置缓存标示
// 判断是否有这个查询缓存
if(!$cache){ //$cache 中是缓存的标示(每个查询都对应一个缓存 即 不同的查询有不同的缓存)
  $cache=$video->where($map)->order($order)->limit($limit)->select();
  foreach($cache as $key=>$value){
  $userlist=$user->where("id=".$value['user_id'])->find();
  $cache[$key]["nickname"]=$userlist['nickname'];
  }
  S($cachename,$cache,3600); //设置缓存的生存时间
  }
  S($cachename,NULL); //删除缓存
(0)

相关推荐

  • ThinkPHP3.1新特性之动态设置自动完成和自动验证示例

    以往在ThinkPHP3.1版本之前,如果需要设置自动验证或者自动完成,一般来说必须定义在模型中,或者通过setProperty方法动态设置属性来完成,这样做的缺点是不太方便动态改变和调整. ThinkPHP3.1版本在模型类中增加auto和validate两个连贯操作,用于动态设置自动完成和自动验证规则,现在可以在Action中使用: $validate = array( array('verify','require','验证码必须!'), array('name','','帐号名称已经存在

  • thinkPHP中配置的读取与C方法详解

    本文实例讲述了thinkPHP中配置的读取与C方法.分享给大家供大家参考,具体如下: 1.项目公共配置 Conf/config.php 内容如下 <?php /** *项目公共配置 *@package *@author **/ return array( 'LOAD_EXT_CONFIG' => 'db,info,email,safe,upfile,cache,route,app,alipay,sms,platform,store,pay', 'APP_AUTOLOAD_PATH' =>

  • thinkPHP5.0框架简单配置作用域的方法

    本文实例讲述了thinkPHP5.0框架简单配置作用域的方法.分享给大家供大家参考,具体如下: 配置参数支持作用域的概念,默认情况下,所有参数都在同一个系统默认作用域下面.如果你的配置参数需要用于不同的项目或者相互隔离,那么就可以使用作用域功能,作用域的作用好比是配置参数的命名空间一样. // 导入my_config.php中的配置参数,并纳入user作用域 Config::load('my_config.php','','user'); // 解析并导入my_config.ini 中的配置参数

  • THINKPHP支持YAML配置文件的设置方法

    为什么要用 yaml 因为 Yaml 简单,而且对人类友好: Yaml: http://www.yaml.org/ 在哪里会用到? 最基本的,在 ThinkPHP 的配置文件里面就可以选择 Yaml 的格式,你是愿意写 Yaml 的简洁格式配置呢?还是愿意写又长又臭又难写的 PHP array 呢? http://document.thinkphp.cn/manual_3_2.html#config_format 问题来了 于是,我把配置格式改为 Yaml: 复制代码 代码如下: // /ind

  • ThinkPHP3.1新特性之动态设置自动完成及自动验证示例代码

    在ThinkPHP3.1版本之前,如果需要设置自动验证或者自动完成,必须定义在模型中,或者通过setProperty方法动态设置属性来完成,但是这样做的缺点是不太方便动态改变和调整 . ThinkPHP3.1版本在模型类中增加auto和validate两个连贯操作,用于动态设置自动完成和自动验证规则,现在可以在Action中使用,示例代码如下: $validate = array( array(verify,require,验证码必须!), array(name,,帐号名称已经存在!,0,uni

  • ThinkPHP项目分组配置方法分析

    本文实例讲述了ThinkPHP项目分组配置方法.分享给大家供大家参考,具体如下: 项目分组概述 项目分组是 ThinkPHP 一个重要机制,项目分组功能可以把以往的多项目合并到一个项目中去,对于公共的文件可以重用,但每个分组又可以有自己独立的配置文件.公共文件.语言包等. 以一个普通的网站为例,如果不采用项目分组,那么通常是将网站前台(提供给用户浏览部分)作为一个项目.而网站的后台管理部分,可能有独立的配置文件,CSS文件及模板等,因此作为另一个项目来管理.但实际上这两个项目都是网站的内容,他们

  • ThinkPHP的常用配置选项汇总

    本文实例讲述了ThinkPHP的常用配置选项.分享给大家供大家参考,具体如下: return array( /* Dispatch设置 */ 'DISPATCH_ON' => true, // 是否启用Dispatcher // URL模式: 0 普通模式 1 PATHINFO 2 REWRITE 3 兼容模式 当DISPATCH_ON开启后有效 'URL_MODEL' => 1, // 默认为PATHINFO 模式,提供最好的用户体验和SEO支持 // PATHINFO 模式 // 普通模式

  • ThinkPHP实现动态包含文件的方法

    本文实例讲述了ThinkPHP实现动态包含文件的方法.分享给大家供大家参考.具体分析如下: 问题描述:在做项目的时候遇到问题,也是很常见的问题,一般主页包含头部和脚步,为了方便管理,这些都需要使用包含文件来实现,ThinkPHP提供了包含文件的方法,以上是最简单的包含的操作的方式,但是在运行的过程中我发现,在请求的时候只是请求的是模板文件,也就是所谓的静态包含,但是如果遇到菜单是动态生成的就很难办了. 在网上找到一个解决办法:使用Widget 1.我们在页面中实现一个分类显示的Widget,首先

  • thinkPHP5.0框架独立配置与动态配置方法

    本文实例讲述了thinkPHP5.0框架独立配置与动态配置方法.分享给大家供大家参考,具体如下: 独立配置文件: 新版支持配置文件分离,只需要配置extra_config_list参数(在应用公共配置文件中). 例如,不使用独立配置文件的话,数据库配置信息应该是在config.php中配置如下: /* 数据库设置 */ 'database' => [ // 数据库类型 'type' => 'mysql', // 服务器地址 'hostname' => '127.0.0.1', // 数据

  • thinkPHP5.0框架环境变量配置方法

    本文实例讲述了thinkPHP5.0框架环境变量配置方法.分享给大家供大家参考,具体如下: 允许使用环境变量配置,并且优先级别比在配置文件中要高,因为在读取配置参数的时候,首先会判断环境变量中是否存在该配置. 在开发过程中,可以在应用根目录下面的.env来模拟环境变量配置,.env文件中的配置参数定义格式采用ini方式,例如: app_debug = true app_trace = true 如果你的部署环境单独配置了环境变量,那么请删除.env配置文件,避免冲突. 环境变量配置的参数会全部转

  • Nginx下支持Thinkphp URL Rewrite的配置示例

    概述 Nginx服务器现在已经成为相当流行的开源Web服务器,很多生产环境也都在使用Nginx服务器.现在做项目大多数时候都是在使用ThinkPHP,但是Nginx默认不支持ThinkPHP的pathinfo模式,需要进行一定的配置. Nginx配置文件 # # The default server # server { listen 80 default_server; #server_name www.example.com; #charset koi8-r; #access_log log

随机推荐