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


Posted in PHP onOctober 26, 2015

系统默认的缓存方式是采用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方法)和动态缓存(S方法)(日常整理)

再次刷新后如下图:

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

下面给大家单独介绍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); //删除缓存
PHP 相关文章推荐
实现了一个PHP5的getter/setter基类的代码
Feb 25 PHP
实用函数10
Nov 08 PHP
Uchome1.2 1.5 代码学习 common.php
Apr 24 PHP
PHP CodeBase:将时间显示为&quot;刚刚&quot;&quot;n分钟/小时前&quot;的方法详解
Jun 06 PHP
php 判断是否是中文/英文/数字示例代码
Sep 30 PHP
php实现扫描二维码根据浏览器类型访问不同下载地址
Oct 15 PHP
UPUPW 更新 64 位 Apache 系列 PHP 7.0 正式版
Dec 08 PHP
WordPress中用于更新伪静态规则的PHP代码实例讲解
Dec 18 PHP
php mailer类调用远程SMTP服务器发送邮件实现方法
Mar 04 PHP
浅谈PHP匿名函数和闭包
Mar 08 PHP
PHP中quotemeta()函数的用法讲解
Apr 04 PHP
使用composer安装使用thinkphp6.0框架问题【视频教程】
Oct 01 PHP
PHP和C#可共用的可逆加密算法详解
Oct 26 #PHP
日常整理PHP中简单的图形处理(经典)
Oct 26 #PHP
php 参数过滤、数据过滤详解
Oct 26 #PHP
php解析url并得到url中的参数及获取url参数的四种方式
Oct 26 #PHP
php实现CSV文件导入和导出
Oct 24 #PHP
PHP错误Warning:mysql_query()解决方法
Oct 24 #PHP
php实现表单多按钮提交action的处理方法
Oct 24 #PHP
You might like
用PHP实现WEB动态网页静态
2006/10/09 PHP
php checkdate、getdate等日期时间函数操作详解
2010/03/11 PHP
PHP新手用的Insert和Update语句构造类
2012/03/31 PHP
php实现和c#一致的DES加密解密实例
2017/07/24 PHP
PHP使用文件锁解决高并发问题示例
2018/03/29 PHP
YII2框架使用控制台命令的方法分析
2020/03/18 PHP
Javascript 去除数组的重复元素
2010/05/04 Javascript
js parseInt(&quot;08&quot;)未指定进位制问题
2010/06/19 Javascript
基于jquery的图片的切换(以数字的形式)
2011/02/14 Javascript
jQuery隐藏和显示效果实现
2016/04/06 Javascript
jQuery实现立体式数字滚动条增加效果
2016/12/21 Javascript
基于Bootstrap漂亮简洁的CSS3价格表(附源码下载)
2017/02/28 Javascript
vue router嵌套路由在history模式下刷新无法渲染页面问题的解决方法
2018/01/25 Javascript
Node.js API详解之 string_decoder用法实例分析
2020/04/29 Javascript
小程序实现列表倒计时功能
2021/01/29 Javascript
Python 数据结构之堆栈实例代码
2017/01/22 Python
python智联招聘爬虫并导入到excel代码实例
2019/09/09 Python
python shell命令行中import多层目录下的模块操作
2020/03/09 Python
python实现PDF中表格转化为Excel的方法
2020/06/16 Python
python boto和boto3操作bucket的示例
2020/10/30 Python
清除canvas画布内容(点擦除+线擦除)
2020/08/12 HTML / CSS
全球速卖通法国在线交易平台:AliExpress法国
2017/07/07 全球购物
加拿大领先的优质厨具产品在线购物网站:Golda’s Kitchen
2017/11/17 全球购物
介绍一下linux文件系统分配策略
2012/11/17 面试题
幼儿园教师演讲稿
2014/05/06 职场文书
大学生社会实践方案
2014/05/11 职场文书
总经理任命书范本
2014/06/05 职场文书
化工专业自荐书
2014/06/16 职场文书
应届生求职信范文
2014/06/30 职场文书
高中生学习计划书
2014/09/15 职场文书
师德标兵事迹材料
2014/12/19 职场文书
幼儿园中班教师个人总结
2015/02/05 职场文书
副校长2015年教育教学工作总结
2015/07/27 职场文书
Vue+Element UI实现概要小弹窗的全过程
2021/05/30 Vue.js
欧元符号 €
2022/02/17 杂记
python+pytest接口自动化之token关联登录的实现
2022/04/06 Python