• 技术文章 >后端开发 >php教程

    浅析ThinkPHP缓存之快速缓存(F方法)和动态缓存(S方法)(日常整理)_php实例

    2016-06-07 17:11:07原创393

    系统默认的缓存方式是采用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 方法的快速缓存

    使用文件方式的缓存就能够满足要求,所以系统还提供了一个专门用于文件方式的快速缓存方法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); //删除缓存
    声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn核实处理。
    上一篇:PHP中SSO Cookie登录分析和实现_php实例 下一篇:自己动手写 PHP MVC 框架(40节精讲/巨细/新人进阶必看)

    相关文章推荐

    • PHP socket学习:带你做个简单的socket服务器• 一文详解PHP用流方式实现下载文件(附代码示例)• 聊聊ChatGPT是啥?PHP怎么使用ChatGPT?• PHP反序列化入门总结(小白必看)• PHP原生类的总结分享
    1/1

    PHP中文网