浅析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安全性漫谈
Jun 28 PHP
PHP时间戳与日期之间转换的实例介绍
Apr 19 PHP
php中PDO方式实现数据库的增删改查
May 17 PHP
php析构函数的简单使用说明
Aug 24 PHP
部署PHP时的4个配置修改说明
Oct 19 PHP
php防止CC攻击代码 php防止网页频繁刷新
Dec 21 PHP
php连接oracle数据库的方法(测试成功)
May 26 PHP
如何用PHP做到页面注册审核
Mar 02 PHP
php实现与python进行socket通信的方法示例
Aug 30 PHP
PHP如何实现订单的延时处理详解
Dec 30 PHP
Yii2框架实现登陆添加验证码功能示例
Jul 12 PHP
yii2.0框架场景的简单使用示例
Jan 25 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自动注册登录验证机制实现代码
2011/12/20 PHP
解析PHP计算页面执行时间的实现代码
2013/06/18 PHP
php通过正则表达式记取数据来读取xml的方法
2015/03/09 PHP
PHP 以POST方式提交XML、获取XML,解析XML详解及实例
2016/10/26 PHP
PHP二维关联数组的遍历方式(实例讲解)
2017/10/18 PHP
关于php支持的协议与封装协议总结(推荐)
2017/11/17 PHP
使用新的消息弹出框blackbirdjs
2008/10/16 Javascript
Linux下使用jq友好的打印JSON技巧分享
2014/11/18 Javascript
jquery京东商城双11焦点图多图广告特效代码分享
2015/09/06 Javascript
第一次接触JS require.js模块化工具
2016/04/17 Javascript
AngularJS实现textarea记录只能输入规定数量的字符并显示
2016/04/26 Javascript
轻松学习Javascript闭包
2017/03/01 Javascript
node使用Koa2搭建web项目的方法
2017/10/17 Javascript
微信小程序实现左右列表联动
2020/05/19 Javascript
小程序封装wx.request请求并创建接口管理文件的实现
2019/04/29 Javascript
vue实现购物车小案例
2019/09/27 Javascript
vue使用高德地图点击下钻上浮效果的实现思路
2019/10/12 Javascript
从0搭建vue-cli4脚手架
2020/06/17 Javascript
学习python (1)
2006/10/31 Python
python读取注册表中值的方法
2013/04/08 Python
跟老齐学Python之集合的关系
2014/09/24 Python
Python抽象类的新写法
2015/06/18 Python
Python简单实现TCP包发送十六进制数据的方法
2016/04/16 Python
windows10系统中安装python3.x+scrapy教程
2016/11/08 Python
Python BS4库的安装与使用详解
2018/08/08 Python
详解pandas.DataFrame中删除包涵特定字符串所在的行
2019/04/04 Python
5款Python程序员高频使用开发工具推荐
2019/04/10 Python
创建Shapefile文件并写入数据的例子
2019/11/26 Python
利用Python实现斐波那契数列的方法实例
2020/07/26 Python
使用数据结构给女朋友写个Html5走迷宫游戏
2019/11/26 HTML / CSS
Jogun Shop中文官网:韩国知名时尚男装网站
2016/10/12 全球购物
超市业务员岗位职责
2013/12/05 职场文书
自荐信如何制作?
2014/02/21 职场文书
电视节目策划方案
2014/05/16 职场文书
五星级酒店前台接待岗位职责
2015/04/02 职场文书
css height属性中的calc方法详解
2021/06/03 HTML / CSS