搜尋
首頁php框架ThinkPHPthinkphp有哪些快取類型

thinkphp有哪些快取類型

Aug 22, 2019 pm 01:43 PM
thinkphp快取類型

thinkphp有哪些快取類型

ThinkPHP提供了方便的快取方式,包括資料快取、靜態快取和查詢快取等,支援包括檔案方式、APC、Db、Memcache、Shmop、 Sqlite、Redis、Eaccelerator和Xcache在內的動態資料快取類型,以及可自訂的靜態快取規則,並提供了快捷方法進行存取操作。

資料快取

Thinkphp快取檔案的配置

Home是我建立的前台項目,在Home\Conf\config.php找到快取的配置文件,配置如下:

<?php   
   return array(       
   &#39;DB_TYPE&#39;=>&#39;mysql&#39;,       
   &#39;DB_HOST&#39;=>&#39;127.0.0.1&#39;,       
  &#39;DB_NAME&#39;=>&#39;w3note&#39;,       
   &#39;DB_USER&#39;=>&#39;root&#39;,       
  &#39;DB_PWD&#39;=>&#39;123456&#39;,       
  &#39;DB_PORT&#39;=>&#39;3306&#39;,       
  &#39;DB_PREFIX&#39;=>&#39;w3_&#39;,       
  &#39;DATA_CACHE_TYPE&#39;=>&#39;file&#39;,//设置缓存方式为file       
  &#39;DATA_CACHE_TIME&#39;=>&#39;600&#39;,//缓存周期600秒       
 );       
 ?>

Thinkphp快取函數的使用

在thinkphp中,使用快捷快取函數S()進行緩存,其用法如下:

S(&#39;data&#39;,$Data);//使用data标识缓存$Data数据  
S(&#39;data&#39;,$Data,600);// 缓存$Data数据600秒  
 $Data = S(&#39;data&#39;);// 获取缓存数据  
S(&#39;data&#39;,NULL);// 删除缓存数据

實例示範

<?php       
 // 本类由系统自动生成,仅供测试用途       
  class IndexAction extends Action{       
    public function index(){       
        //如果有缓存,则读取缓存数据       
        //如果没有缓存,则读取数据库当中的数据放入缓存       
        $lists=S(&#39;lists&#39;);                     
        if(emptyempty($lists)){                           
          $news=M(&#39;news&#39;);   
          $lists=$news->select();   
          S(&#39;lists&#39;,$lists,600);   
          echo &#39;这是直接读取数据库的数据&#39;;       
           }   
        dump($list);  
 ?>

造訪http://127.0.0.1/Home/index.php/Index/index,

第一次造訪:

這是直接讀取資料庫的數據

array(10) {  
   [0] => array(12) {  
     ["id"] => string(1) "1"  
     ["catid"] => string(2) "13"  
     ["title"] => string(4) "thinkphp的缓存技术"  
     ["content"] => string(8) "thinkphp的缓存技术"  
     ["tags"] => string(4) "缓存"  
     ["thumb"] => string(0) ""  
     ["description"] => string(7) "thinkphp的缓存技术"  
     ["inputtime"] => string(10) "1348370202"  
     ["posid"] => string(1) "1"  
     ["ord"] => string(1) "2"  
     ["hits"] => string(1) "1"  
     ["status"] => string(1) "1"  
 }

第二次訪問:

array(10) {  
   [0] => array(12) {  
     ["id"] => string(1) "1"  
     ["catid"] => string(2) "13"  
     ["title"] => string(4) "thinkphp的缓存技术"  
     ["content"] => string(8) "thinkphp的缓存技术"  
     ["tags"] => string(4) "缓存"  
     ["thumb"] => string(0) ""  
     ["description"] => string(7) "thinkphp的缓存技术"  
     ["inputtime"] => string(10) "1348370202"  
     ["posid"] => string(1) "1"  
     ["ord"] => string(1) "2"  
     ["hits"] => string(1) "1"  
     ["status"] => string(1) "1"  
 }

說明:第一次運行時,會打印出如上面所示信息,刷新一下頁面後,少了“ 這是直接讀取資料庫的資料" ,表示讀取的是先前產生的快取資料。

相關推薦:《ThinkPHP教學

快速快取

如果你只是希望用檔案的方式快取一些簡單的數據,並且沒有有效期的概念,那麼系統還提供了一個快速緩存方法F可以用來更快的操作。

快速快取Data數據,預設保存在DATA_PATH目錄下面

F(&#39;data&#39;,$Data);

快速快取Data數據,儲存到指定的目錄

F(&#39;data&#39;,$Data,TEMP_PATH);

取得快取資料

$Data = F(&#39;data&#39;);

刪除快取資料

F(&#39;data&#39;,NULL);

F方法支援自動建立快取子目錄,在DATA_PATH目錄下方快取data數據,如果User子目錄不存在,則自動建立:

F(&#39;User/data&#39;,$Data);

3.1.2版本開始F方法支援使用通配符批量刪除功能,使用如下:

F(&#39;User/*&#39;,NULL);

表示刪除DATA_PATH.'User/'目錄下面的資料快取。

系統內建的資料欄位資訊快取就是用了快速快取機制。

查詢快取

對於及時性要求不高的資料查詢,我們可以使用查詢快取功能來提高效能,而且無需自己使用快取方法進行快取和獲取。

APP/config.php設定:

&#39;DATA_CACHE_TIME&#39;   => 60, // 数据缓存有效期 0表示永久缓存
&#39;DATA_CACHE_TYPE&#39;   => &#39;File&#39;,
 // 数据缓存类型,支持:File|Db|Apc|Memcache|Shmop|Sqlite|Xcache|Apachenote|Eaccelerator
&#39;DB_SQL_BUILD_CACHE&#39; => true,
&#39;DB_SQL_BUILD_LENGTH&#39; => 20, // SQL缓存的队列长度
&#39;DATA_CACHE_PATH&#39; => TEMP_PATH,

查詢快取功能支援所有的資料庫,並且支援所有的快取方式和有效期限。

在使用查詢快取的時候,只需要呼叫Model類別的cache方法,例如:

$Model->cache(true)->select();

如果使用了cache(true) ,則在查詢的同時會根據目前的查詢SQL產生查詢緩存,預設值快取方式採用DATA_CACHE_TYPE參數設定的快取方式(系統預設值為File表示採用檔案方式快取),快取有效期限是DATA_CACHE_TIME 參數設定的時間,也可以單獨制定查詢快取的快取方式和有效期限:

$Model->cache(true,60,&#39;xcache&#39;)->select();

表示目前查詢快取的快取方式為xcache,且快取有效期限為60秒。

同樣的查詢,如果沒有使用cache方法,則不會取得或產生任何緩存,即使是先前曾呼叫過Cache方法。

查詢快取只是供內部調用,如果希望查詢快取開放給其他程式調用,可以指定查詢快取的Key,例如:

$Model->cache(&#39;cache_name&#39;,60)->select();

則可以在外部透過S方法直接取得查詢緩存的內容,

$value = S(&#39;cache_name&#39;);

除了select方法之外,查詢快取還支援find和getField方法,以及他們的衍生方法(包括統計查詢和動態查詢方法)。具體應用的時候可以根據需要選擇快取方式和快取有效期限。

SQL解析快取

除了查詢快取之外,ThinkPHP也支援SQL解析緩存,因為ThinkPHP的ORM機制,所有的SQL都是動態產生的,然後由資料庫驅動執行。

所以如果你的應用程式有大量的SQL查詢需求,那麼可以開啟SQL解析快取以減少SQL解析來提高效能。要開啟SQL解析緩存,只需要設定:

&#39;DB_SQL_BUILD_CACHE&#39; => true,

即可開啟資料庫查詢的SQL建立緩存,預設快取方式為檔案方式,還可以支援xcache和apc方式緩存,只需要設定:

&#39;DB_SQL_BUILD_QUEUE&#39; => &#39;xcache&#39;,

我們知道,一個專案的查詢SQL的量可能會非常巨大,所以有必要設定下快取的佇列長度,例如,我們希望SQL解析快取不超過20筆記錄,可以設定:

&#39;DB_SQL_BUILD_LENGTH&#39; => 20, // SQL缓存的队列长度

注意:只有查詢方法才支援SQL解析快取

靜態快取

#要使用靜態快取功能,需要開啟HTML_CACHE_ON參數,並且使用HTML_CACHE_RULES配置參數設定靜態快取規則檔案。

雖然也可以在應用程式設定檔中定義靜態快取規則,但是建議是在模組設定檔中為不同的模組定義靜態快取規則。

靜態規則定義

靜態規則的定義方式如下:

&#39;HTML_CACHE_ON&#39; => true, // 开启静态缓存
&#39;HTML_CACHE_TIME&#39; => 60, // 全局静态缓存有效期(秒)
&#39;HTML_FILE_SUFFIX&#39; => &#39;.shtml&#39;, // 设置静态缓存文件后缀
&#39;HTML_CACHE_RULES&#39; => array( // 定义静态缓存规则
 // 定义格式1 数组方式
 &#39;静态地址&#39; => array(&#39;静态规则&#39;, &#39;有效期&#39;, &#39;附加规则&#39;), 
 // 定义格式2 字符串方式
 &#39;静态地址&#39; => &#39;静态规则&#39;, 
)

定義格式1採用陣列方式便於單獨為某個靜態規則設定不同的有效期限,定義格式2採用字串方式訂閱靜態規則,同時採用HTML_CACHE_TIME設定的全域靜態快取有效期限。

静态缓存文件的根目录在HTML_PATH定义的路径下面,并且只有定义了静态规则的操作才会进行静态缓存。 并且静态缓存支持不同的存储类型。 静态缓存仅在GET请求下面有效。

静态地址

静态地址包括下面几种定义格式:

第一种是定义全局的操作静态规则,例如定义所有的read操作的静态规则为:

&#39;read&#39;=>array(&#39;{id}&#39;,60)

其中,{id}

表示取$_GET['id']

为静态缓存文件名,第二个参数表示缓存60秒。

第二种是定义全局的控制器静态规则,例如定义所有的User控制器的静态规则为:

&#39;user:&#39;=>array(&#39;User/{:action}_{id}&#39;,&#39;600&#39;)

其中,{:action}

表示当前的操作名称

第三种是定义某个控制器的操作的静态规则,例如,我们需要定义Blog控制器的read操作进行静态缓存

&#39;blog:read&#39;=>array(&#39;{id}&#39;,0)

第四种方式是定义全局的静态缓存规则,这个属于特殊情况下的使用,任何模块的操作都适用,例如:

&#39;*&#39;=>array(&#39;{$_SERVER.REQUEST_URI|md5}&#39;),

表示根据当前的URL进行缓存。

静态规则

静态规则是用于定义要生成的静态文件的名称,静态规则的定义要确保不会冲突,写法可以包括以下情况:

1.使用系统变量

包括 _GET、_REQUEST、_SERVER、_SESSION、_COOKIE

格式:

{$_×××|function}

例如:

{$_GET.name} 
{$_SERVER.REQUEST_URI|md5}

2.使用框架特定的变量

{:module} 、{:controller} 和{:action}

分别表示当前模块名、控制器名和操作名。

例如:

{:module}/{:controller}_{:action}

3.使用_GET变量

{var|function}也就是说 {id}其实等效于 {$_GET.id}

4.直接使用函数

{|function} 例如:{|time}

5.支持混合定义

例如我们可以定义一个静态规则为:

&#39;{id},{name|md5}&#39;

在{}之外的字符作为字符串对待,如果包含有"/",会自动创建目录。

例如,定义下面的静态规则:

{:module}/{:action}_{id}

则会在静态目录下面创建模块名称的子目录,然后写入操作名_id.shtml 文件。

静态缓存有效期

单位为秒。如果不定义,则会获取配置参数HTML_CACHE_TIME的设置值,如果定义为0则表示永久缓存。

附加规则

通常用于对静态规则进行函数运算,例如:

&#39;read&#39;=>array(&#39;Think{id},{name}&#39;,&#39;60&#39;, &#39;md5&#39;)

翻译后的静态规则是

md5(&#39;Think&#39;.$_GET[&#39;id&#39;]. &#39;, &#39;.$_GET[&#39;name&#39;]);

以上是thinkphp有哪些快取類型的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱工具

DVWA

DVWA

Damn Vulnerable Web App (DVWA) 是一個PHP/MySQL的Web應用程序,非常容易受到攻擊。它的主要目標是成為安全專業人員在合法環境中測試自己的技能和工具的輔助工具,幫助Web開發人員更好地理解保護網路應用程式的過程,並幫助教師/學生在課堂環境中教授/學習Web應用程式安全性。 DVWA的目標是透過簡單直接的介面練習一些最常見的Web漏洞,難度各不相同。請注意,該軟體中

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

SublimeText3 英文版

SublimeText3 英文版

推薦:為Win版本,支援程式碼提示!

ZendStudio 13.5.1 Mac

ZendStudio 13.5.1 Mac

強大的PHP整合開發環境

PhpStorm Mac 版本

PhpStorm Mac 版本

最新(2018.2.1 )專業的PHP整合開發工具