首頁 > 後端開發 > php教程 > ThinkPHP快取之快速快取與動態緩存

ThinkPHP快取之快速快取與動態緩存

不言
發布: 2023-03-30 22:00:01
原創
2053 人瀏覽過

thinkPHP的F方法只能用於快取簡單資料類型,不支援有效期限和快取物件。 S()快取方法支援有效期,又稱動態快取方法。本文是小編日常整理有關thinkphp快取方法,對thinkphp快取方法有興趣的朋友一起學習吧

系統預設的快取方式是採用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 &#39;asdfasdfasdaaaaaaaaaaaaaaaaaaaaaa&#39;;
?>
登入後複製

下面一段程式碼是ThinkPHP快取方法S()概述

thinkPHP的F方法只能用於快取簡單數據類型,不支援有效期和快取物件。 S()快取方法支援有效期,又稱為動態快取方法,使用範例如下:

程式碼如下:

// 使用data标识缓存$Data数据
S(&#39;data&#39;,$Data);  //前面的是缓存标示,后面的是缓存的数据
登入後複製

程式碼如下:

// 缓存$Data数据3600秒
S(&#39;data&#39;,$Data,3600);
登入後複製

 程式碼如下:

// 删除缓存数据
S(&#39;data&#39;,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[&#39;user_id&#39;])->find();
  $cache[$key]["nickname"]=$userlist[&#39;nickname&#39;];
  }
  S($cachename,$cache,3600); //设置缓存的生存时间 
  }
  S($cachename,NULL); //删除缓存
登入後複製

以上就是本文的全部內容,希望對大家的學習有所幫助,更多相關內容請關注PHP中文網!

相關推薦:

關於ThinkPHP實作靜態快取與動態快取的分析

##

以上是ThinkPHP快取之快速快取與動態緩存的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
最新問題
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板