浅析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 相关文章推荐
Ext.data.PagingMemoryProxy分页一次性读取数据的实现代码
Apr 07 PHP
PHP 函数执行效率的小比较
Oct 17 PHP
PHP解决URL中文GBK乱码问题的两种方法
Jun 03 PHP
PHP模板解析类实例
Jul 09 PHP
Zend Framework基本页面布局分析
Mar 19 PHP
mac系统下为 php 添加 pcntl 扩展
Aug 28 PHP
thinkPHP自定义类实现方法详解
Nov 30 PHP
thinkPHP5.0框架开发规范简介
Mar 25 PHP
PHP实现数组转JSon和JSon转数组的方法示例
Jun 14 PHP
thinkPHP框架动态配置用法实例分析
Jun 14 PHP
深入分析PHP设计模式
Jun 15 PHP
phpmyadmin在宝塔面板里进不去的解决方案
Jul 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
杏林同学录(四)
2006/10/09 PHP
phpMyAdmin 安装教程全攻略
2007/03/19 PHP
discuz安全提问算法
2007/06/06 PHP
QQ登录 PHP OAuth示例代码
2011/07/20 PHP
MySQL的FIND_IN_SET函数使用方法分享
2012/03/27 PHP
php实现的递归提成方案实例
2015/11/14 PHP
PHP使用Curl实现模拟登录及抓取数据功能示例
2018/04/27 PHP
php设计模式之观察者模式实例详解【星际争霸游戏案例】
2020/03/30 PHP
CSS+JS构建的图片查看器
2006/07/22 Javascript
zeroclipboard复制到剪切板的flash
2010/08/04 Javascript
js一般方法改写成面向对象方法的无限级折叠菜单示例代码
2013/07/04 Javascript
js中document.write使用过程中的一点疑问解答
2014/03/20 Javascript
用html5 js实现点击一个按钮达到浏览器全屏效果
2014/05/28 Javascript
JQuery中使用.each()遍历元素学习笔记
2014/11/08 Javascript
jquery Deferred 快速解决异步回调的问题
2016/04/05 Javascript
jQuery使用EasyUi实现三级联动下拉框效果
2017/03/08 Javascript
vue组件实现可搜索下拉框扩展
2020/10/23 Javascript
vue+SSM实现验证码功能
2018/12/07 Javascript
vue使用vant中的checkbox实现全选功能
2020/11/17 Vue.js
python两种遍历字典(dict)的方法比较
2014/05/29 Python
Python urlopen()函数 示例分享
2014/06/12 Python
Python中shutil模块的学习笔记教程
2017/04/04 Python
python:print格式化输出到文件的实例
2018/05/14 Python
python排序函数sort()与sorted()的区别
2018/09/18 Python
Python安装依赖(包)模块方法详解
2020/02/14 Python
利用 Python ElementTree 生成 xml的实例
2020/03/06 Python
浅析Django 接收所有文件,前端展示文件(包括视频,文件,图片)ajax请求
2020/03/09 Python
django列表筛选功能的实现代码
2020/03/27 Python
python 通过文件夹导入包的操作
2020/06/01 Python
详解基于Facecognition+Opencv快速搭建人脸识别及跟踪应用
2021/01/21 Python
英国Office鞋店德国网站:在线购买鞋子、靴子和运动鞋
2018/12/19 全球购物
幼儿园教师的考核评语
2014/04/18 职场文书
副校长2015年教育教学工作总结
2015/07/27 职场文书
SpringCloud Alibaba项目实战之nacos-server服务搭建过程
2021/06/21 Java/Android
索尼ICF-5900W收音机测评
2022/04/24 无线电
使用Python开发贪吃蛇游戏 SnakeGame
2022/04/30 Python