浅析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 相关文章推荐
强烈声明: 不要使用(include/require)_once
Jun 06 PHP
php实例分享之通过递归实现删除目录下的所有文件详解
May 15 PHP
Php连接及读取和写入mysql数据库的常用代码
Aug 11 PHP
php实现事件监听与触发的方法
Nov 21 PHP
smarty模板引擎从php中获取数据的方法
Jan 22 PHP
Java和PHP在Web开发方面对比分析
Mar 01 PHP
PHP正则验证Email的方法
Jun 15 PHP
php图像验证码生成代码
Jun 08 PHP
PHP读取CSV大文件导入数据库的实例
Jul 24 PHP
[原创]PHP实现字节数Byte转换为KB、MB、GB、TB的方法
Aug 31 PHP
PHP的PDO预定义常量讲解
Jan 24 PHP
Laravel 默认邮箱登录改成用户名登录的实现方法
Aug 12 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
fleaphp crud操作之find函数的使用方法
2011/04/23 PHP
php多文件上传功能实现原理及代码
2013/04/18 PHP
php读取二进制流(C语言结构体struct数据文件)的深入解析
2013/06/13 PHP
php使用base64加密解密图片示例分享
2014/01/20 PHP
php中session使用示例
2014/03/29 PHP
PHP对象递归引用造成内存泄漏分析
2014/08/28 PHP
将string解析为json的几种方式小结
2010/11/11 Javascript
简单选项卡 js和jquery制作方法分享
2014/02/26 Javascript
浅谈jQuery中对象遍历.eq().first().last().slice()方法
2014/11/26 Javascript
node.js中的fs.utimesSync方法使用说明
2014/12/15 Javascript
node.js中的fs.exists方法使用说明
2014/12/17 Javascript
jquery+css3实现网页背景花瓣随机飘落特效
2015/08/17 Javascript
JS实现自动固定顶部的悬浮菜单栏效果
2015/09/16 Javascript
JavaScript实现的伸展收缩型菜单代码
2015/10/14 Javascript
jQuery获取attr()与prop()属性值的方法及区别介绍
2016/07/06 Javascript
原生JS实现的放大镜效果实例代码
2016/10/15 Javascript
JS中跳出循环的示例代码
2017/09/14 Javascript
实例解析ES6 Proxy使用场景介绍
2018/01/08 Javascript
vue微信分享出来的链接点开是首页问题的解决方法
2018/11/28 Javascript
[02:21]DOTA2英雄基础教程 蝙蝠骑士
2013/12/16 DOTA
[30:37]【全国守擂赛】第三周擂主赛 Dark Knight vs. Leopard Gaming
2020/05/04 DOTA
Python实现抓取网页并且解析的实例
2014/09/20 Python
python版学生管理系统
2018/01/10 Python
解决Matplotlib图表不能在Pycharm中显示的问题
2018/05/24 Python
使用python3调用wxpy模块监控linux日志并定时发送消息给群组或好友
2019/06/05 Python
浅谈pyqt5在QMainWindow中布局的问题
2019/06/21 Python
python爬虫的一个常见简单js反爬详解
2019/07/09 Python
Python使用uuid库生成唯一标识ID
2020/02/12 Python
Python生成器传参数及返回值原理解析
2020/07/22 Python
纯CSS3实现漂亮的input输入框动画样式库(Text input love)
2018/12/29 HTML / CSS
英国第一职业高尔夫商店:Clickgolf.co.uk
2020/11/18 全球购物
利群广告词
2014/03/20 职场文书
2015年客服工作总结范文
2015/04/02 职场文书
Mysql 用户权限管理实现
2021/05/25 MySQL
Python何绘制带有背景色块的折线图
2022/04/23 Python
Java8 CompletableFuture 异步回调
2022/04/28 Java/Android