浅析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 相关文章推荐
PHP的中问验证码
Nov 25 PHP
PHP正则的Unknown Modifier错误解决方法
Mar 02 PHP
PHP开源开发框架ZendFramework使用中常见问题说明及解决方案
Jun 12 PHP
php实现二进制和文本相互转换的方法
Apr 18 PHP
php生成4位数字验证码的实现代码
Nov 23 PHP
PHP版本常用的排序算法汇总
Dec 20 PHP
Smarty高级应用之缓存操作技巧分析
May 14 PHP
php中strlen和mb_strlen用法实例分析
Nov 12 PHP
PHP中使用jQuery+Ajax实现分页查询多功能操作(示例讲解)
Sep 17 PHP
laravel实现登录时监听事件,添加登录用户的记录方法
Sep 30 PHP
laravel框架语言包拓展实现方法分析
Nov 22 PHP
4种Windows系统下Laravel框架的开发环境安装及部署方法详解
Apr 06 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 攻击方法之谈php+mysql注射语句构造
2009/10/30 PHP
PHP中$_FILES的使用方法及注意事项说明
2014/02/14 PHP
详解PHP swoole process的使用方法
2017/08/26 PHP
Yii-自定义删除确认弹框(zyd)jquery实现代码
2013/03/04 Javascript
jQuery调用RESTful WCF示例代码(GET方法/POST方法)
2014/01/26 Javascript
jQuery实现购物车多物品数量的加减+总价计算
2014/06/06 Javascript
jQuery Ajax 异步加载显示等待效果代码分享
2016/08/01 Javascript
关于在vue-cli中使用微信自动登录和分享的实例
2017/06/22 Javascript
bootstrap响应式导航条模板使用详解(含下拉菜单,弹出框)
2017/11/17 Javascript
JQuery选中select组件被选中的值方法
2018/03/08 jQuery
webpack4.x开发环境配置详解
2018/08/04 Javascript
基于mpvue的简单弹窗组件mptoast使用详解
2019/08/02 Javascript
解决jquery validate 验证不通过后验证正确的信息仍残留在label上的方法
2019/08/27 jQuery
JavaScript实现放大镜效果代码示例
2020/04/29 Javascript
js实现电灯开关效果
2021/01/19 Javascript
python监控文件或目录变化
2016/06/07 Python
Python装饰器用法实例总结
2018/02/07 Python
Python利用matplotlib.pyplot绘图时如何设置坐标轴刻度
2018/04/09 Python
在python中对变量判断是否为None的三种方法总结
2019/01/23 Python
Python多进程fork()函数详解
2019/02/22 Python
Pytorch抽取网络层的Feature Map(Vgg)实例
2019/08/20 Python
python中提高pip install速度
2020/02/14 Python
HTMl5的存储方式sessionStorage和localStorage详解
2014/03/18 HTML / CSS
Stylenanda中文站:韩国一线网络服装品牌
2016/12/22 全球购物
兰芝美国网上商城:购买LANEIGE睡眠面膜等
2017/06/30 全球购物
斯巴达比赛商店:Spartan Race
2019/01/08 全球购物
KENZO官网:高田贤三在法国创立的品牌
2019/05/16 全球购物
网友共享的几个面试题关于Java和Unix等方面的
2016/09/08 面试题
英语系本科生个人求职信
2013/09/21 职场文书
办公室文秘岗位职责
2013/11/15 职场文书
建筑系毕业生自我鉴定
2014/01/24 职场文书
运动会方阵口号
2014/06/07 职场文书
企业员工集体活动方案
2014/08/17 职场文书
领导干部四风问题自我剖析材料
2014/09/25 职场文书
上班时间打瞌睡检讨书
2014/09/26 职场文书
你为什么是穷人?可能是这5个缺点造成
2019/07/11 职场文书