浅析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下批量挂马和批量清马代码
Feb 27 PHP
php各种编码集详解和以及在什么情况下进行使用
Sep 11 PHP
Sorting Array Values in PHP(数组排序)
Sep 15 PHP
php数组函数序列之array_sum() - 计算数组元素值之和
Oct 29 PHP
简单实现限定phpmyadmin访问ip的方法
Mar 05 PHP
PHP常用的文件操作函数经典收藏
Apr 02 PHP
php四种基础算法代码实例
Oct 29 PHP
开源php中文分词系统SCWS安装和使用实例
Apr 11 PHP
PHP实现定时执行任务的方法
Oct 05 PHP
php使用Session和文件统计在线人数
Jul 04 PHP
PHP静态成员变量
Feb 14 PHP
使用PHP+MySql实现微信投票功能实例代码
Sep 29 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
动态生成gif格式的图像要注意?
2006/10/09 PHP
PHP加密技术的简单实现
2016/09/04 PHP
CheckBox 如何实现全选?
2006/06/23 Javascript
Javascript YUI 读码日记之 YAHOO.util.Dom - Part.3
2008/03/22 Javascript
firefo xml 读写实现js代码
2009/06/11 Javascript
使用nodejs、Python写的一个简易HTTP静态文件服务器
2014/07/18 NodeJs
js图片模糊切换显示特效的方法
2015/02/17 Javascript
jquery控制表单输入框显示默认值的方法
2015/05/22 Javascript
jQuery实现页面顶部显示的进度条效果完整实例
2015/12/09 Javascript
基于jQuery的Web上传插件Uploadify使用示例
2016/05/19 Javascript
Node.js connect ECONNREFUSED错误解决办法
2016/09/15 Javascript
微信小程序 UI布局常用技巧整理总结
2016/12/05 Javascript
jQuery Collapse1.1.0折叠插件简单使用
2017/08/28 jQuery
vue.js中实现登录控制的方法示例
2018/04/23 Javascript
electron实现qq快捷登录的方法示例
2018/10/22 Javascript
你了解vue3.0响应式数据怎么实现吗
2019/06/07 Javascript
html+jQuery实现拖动滑块图片拼图验证码插件【移动端适用】
2019/09/10 jQuery
如何使用JavaScript检测空闲的浏览器选项卡
2020/05/28 Javascript
python基础教程之数字处理(math)模块详解
2014/03/25 Python
python构建深度神经网络(续)
2018/03/10 Python
pandas分别写入excel的不同sheet方法
2018/12/11 Python
python实现一个简单的udp通信的示例代码
2019/02/01 Python
django删除表重建的实现方法
2019/08/28 Python
Python计算IV值的示例讲解
2020/02/28 Python
python反扒机制的5种解决方法
2021/02/06 Python
自荐信范文
2013/12/10 职场文书
国贸专业个人求职信范文
2014/01/08 职场文书
优秀共产党员先进事迹
2014/01/27 职场文书
一份创业计划书范文
2014/02/08 职场文书
教师求职自荐信
2014/03/09 职场文书
汽车广告策划方案
2014/05/31 职场文书
加强作风建设心得体会
2014/10/22 职场文书
道歉的话语大全
2015/05/12 职场文书
MySQL update set 和 and的区别
2021/05/08 MySQL
深入解析Apache Hudi内核文件标记机制
2022/03/31 Servers
win11怎么消除图标小盾牌?win11消除图标小盾牌解决方法
2022/08/05 数码科技