浅析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 相关文章推荐
PHP4实际应用经验篇(8)
Oct 09 PHP
PHP 遍历文件实现代码
May 04 PHP
php 转换字符串编码 iconv与mb_convert_encoding的区别说明
Nov 10 PHP
php处理文件的小例子(解压缩,删除目录)
Feb 03 PHP
php实现单链表的实例代码
Mar 22 PHP
php页面跳转代码 输入网址跳转到你定义的页面
Mar 28 PHP
PHP中session变量的销毁
Feb 27 PHP
php+ajax实现文章自动保存的方法
Dec 30 PHP
PHP 实现判断用户是否手机访问
Jan 21 PHP
PHP编程之设置apache虚拟目录
Jul 08 PHP
微信支付开发订单查询实例
Jul 12 PHP
php更新cookie内容的详细方法
Sep 30 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模板引擎smarty生成随机数的方法和math函数详解
2014/04/24 PHP
浅谈php的优缺点
2015/07/14 PHP
ubuntu下配置nginx+php+mysql详解
2015/09/10 PHP
Yii2前后台分离及migrate使用(七)
2016/05/04 PHP
PHP图像识别技术原理与实现
2016/10/27 PHP
php数据库操作model类(使用__call方法)
2016/11/16 PHP
PHP文件操作实例总结【文件上传、下载、分页】
2018/12/08 PHP
laravel5.6 框架邮件队列database驱动简单demo示例
2020/01/26 PHP
常见JS效果之图片减速度滚动实现代码
2011/12/08 Javascript
jquery三个关闭弹出层的小示例
2013/11/05 Javascript
Jquery+asp.net后台数据传到前台js进行解析的方法
2014/05/11 Javascript
原生js和jQuery写的网页选项卡特效对比
2015/04/27 Javascript
基于jQuery实现在线选座之高铁版
2015/08/24 Javascript
cocos2dx骨骼动画Armature源码剖析(三)
2015/09/08 Javascript
JavaScript toUpperCase()方法使用详解
2016/08/26 Javascript
JavaScript中String对象的方法介绍
2017/01/04 Javascript
js中的面向对象入门
2017/03/06 Javascript
使用vue与jquery实时监听用户输入状态的操作代码
2017/09/19 jQuery
Nodejs实现文件上传的示例代码
2017/09/26 NodeJs
webpack 4.0.0-beta.0版本新特性介绍
2018/02/10 Javascript
[原创]js实现保存文本框内容为本地文件兼容IE,chrome,火狐浏览器
2018/02/14 Javascript
AngularJS修改model值时,显示内容不变的实例
2018/09/13 Javascript
详解JavaScript添加给定的标签选项
2018/09/17 Javascript
vue props default Array或是Object的正确写法说明
2020/07/30 Javascript
从零学Python之hello world
2014/05/21 Python
Python读取和处理文件后缀为.sqlite的数据文件(实例讲解)
2017/06/27 Python
Python Flask基础教程示例代码
2018/02/07 Python
用pyqt5 给按钮设置图标和css样式的方法
2019/06/24 Python
Python3 元组tuple入门基础
2020/02/09 Python
wxPython修改文本框颜色过程解析
2020/02/14 Python
python爬虫破解字体加密案例详解
2021/03/02 Python
服务中心夜班服务员岗位职责
2013/11/27 职场文书
大学新生军训自我鉴定
2014/03/18 职场文书
手机销售员岗位职责
2015/04/11 职场文书
2016年劳模先进事迹材料
2016/02/25 职场文书
解析高可用Redis服务架构分析与搭建方案
2021/06/20 Redis