系统默认的缓存方式是采用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文件:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
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 方法的快速缓存

使用文件方式的缓存就能够满足要求,所以系统还提供了一个专门用于文件方式的快速缓存方法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);  //第一个参数时缓存的标识名

代码如下:

?
1
2
3
4
5
6
7
8
9
10
11
$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); //删除缓存

转载于:https://www.cnblogs.com/danbilly/p/5058898.html

浅析ThinkPHP缓存之快速缓存(F方法)和动态缓存(S方法)相关推荐

  1. matlab 动态加权综合评价_动态加权综合评价方法.ppt

    动态加权综合评价方法 * * (3). 逼近理想点(TOPSIS)方法 4. 综合评价数学模型的建立方法 二.综合评价的一般方法 * * (3). 逼近理想点(TOPSIS)方法 4. 综合评价数学模 ...

  2. java 静态缓存示例_Java 9 JShell示例:集合静态工厂方法

    java 静态缓存示例 这篇文章继续从My My Java 9 Features博客文章中探索Java9功能. 在这里,我们在List,Set和Map接口中试验Java9 Collections静态工 ...

  3. 如何在所有主要浏览器中清除浏览器缓存(快速方式)

    When fixing common WordPress errors, one common piece of advice that you would often receive is to & ...

  4. 浅析http协议、cookies和session机制、浏览器缓存

    浅析http协议.cookies和session机制.浏览器缓存http://blog.csdn.net/coslay/article/details/41674799 最近几天在复习http协议中h ...

  5. ThinkPHP实现静态缓存和动态缓存

    2019独角兽企业重金招聘Python工程师标准>>> 弄清静态缓存和动态缓存的用途: 静态缓存:生成静态页面--缓存的是整个页面; 动态缓存:仅对数据库中的数据进行了缓存,即&qu ...

  6. 计算属性|| 计算属性与方法的区别:计算属性是基于它们的依赖进行缓存的 ;方法不存在缓存||侦听器

    计算属性 1. 为何需要计算属性? 表达式的计算逻辑可能会比较复杂,使用计算属性可以使模板内容更加简洁 2. 计算属性的用法 <!DOCTYPE html> <html lang=& ...

  7. 《高阶Perl》——3.8 对象方法里的缓存

    3.8 对象方法里的缓存 对象方法,它经常不理解地把缓存的值保存在独立的散列里.考虑一个投资银行写的程序里的Investor对象.该对象表现了银行的一个客户: package Investor;# C ...

  8. SpringCache @Cacheable 在同一个类中调用方法,导致缓存不生效的问题及解决办法...

    由于项目需要使用SpringCache来做一点缓存,但自己之前没有使用过(其实是没有听过)SpringCache,于是,必须先学习之. 在网上找到一篇文章,比较好,就先学习了,地址是: https:/ ...

  9. python︱写markdown一样写网页,代码快速生成web工具:streamlit 缓存(五)

    系列参考: python︱写markdown一样写网页,代码快速生成web工具:streamlit介绍(一) python︱写markdown一样写网页,代码快速生成web工具:streamlit 重 ...

最新文章

  1. Leetcode刷题(3)整数反转
  2. sublime_text快捷键
  3. 多股回测(backtrader+quantstats+akshare)
  4. HTML a链接下载文件之图片,文件,乱码等问题
  5. pg库sharelock_PostgreSQL 行锁解读
  6. C++---布隆过滤器
  7. python中元组的赋值_在Python中,元组可以被赋值修改。( ) (2.0分)_学小易找答案...
  8. 使用jeDate日期控件
  9. ad采样正弦电压计算c语言程序,TMS320F2812 DSP编程之AD采样精度的校准算法(转)...
  10. 易基因|植物中m6A甲基化酶调节机制:组成、功能和进化
  11. 计算机水平等级全称,全国计算机等级考试介绍
  12. java http 手机浏览器下载word文档失败的问题
  13. 最新yar扩展安装和使用
  14. 如何利用vga接口的显示器做笔记本的副屏
  15. UG/NX二次开发 判断圆柱面是不是孔的方法
  16. 从0到1:CTFer成长之路docker环境搭建
  17. 58同城2021校招笔试-二叉树遍历
  18. 为什么磁盘分区的时候,第一个分区前面总有一段空间(63或者2048个扇区)
  19. mybatis-plus自定义sql报错 ew.customSqlSegment
  20. ps处理几亿个像素点的照片时,如何保存为几十兆而又很清晰

热门文章

  1. Android动画模式
  2. C#中dynamic、ExpandoObject 的正确用法
  3. 11.11 ntsysv:管理开机服务
  4. python 数据分析班_Python数据分析班
  5. 怎么确定迭代器后面还有至少两个值_为什么range不是迭代器?range到底是什么类型?
  6. P1216 [IOI1994][USACO1.5]数字三角形 Number Triangles(简单dp)
  7. python开发框架 代码生成_500 行 Python 代码构建一个轻量级爬虫框架
  8. 自建ELK迁移阿里云日志服务
  9. 如何做一场高质量的分享?
  10. CDN应用进阶 | 正确使用CDN 让你更好规避安全风险