首頁 php框架 ThinkPHP thinkphp有哪些快取類型

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脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

thinkphp專案怎麼運行 thinkphp專案怎麼運行 Apr 09, 2024 pm 05:33 PM

執行 ThinkPHP 專案需要:安裝 Composer;使用 Composer 建立專案;進入專案目錄,執行 php bin/console serve;造訪 http://localhost:8000 查看歡迎頁面。

thinkphp有幾個版本 thinkphp有幾個版本 Apr 09, 2024 pm 06:09 PM

ThinkPHP 擁有多個版本,針對不同 PHP 版本而設計。主要版本包括 3.2、5.0、5.1 和 6.0,而次要版本用於修復 bug 和提供新功能。目前最新穩定版本為 ThinkPHP 6.0.16。在選擇版本時,需考慮 PHP 版本、功能需求和社群支援。建議使用最新穩定版本以獲得最佳性能和支援。

thinkphp怎麼運行 thinkphp怎麼運行 Apr 09, 2024 pm 05:39 PM

ThinkPHP Framework 的本機運作步驟:下載並解壓縮 ThinkPHP Framework 到本機目錄。建立虛擬主機(可選),指向 ThinkPHP 根目錄。配置資料庫連線參數。啟動 Web 伺服器。初始化 ThinkPHP 應用程式。存取 ThinkPHP 應用程式 URL 運行。

laravel和thinkphp哪個好 laravel和thinkphp哪個好 Apr 09, 2024 pm 03:18 PM

Laravel 和 ThinkPHP 框架的效能比較:ThinkPHP 效能通常優於 Laravel,專注於最佳化和快取。 Laravel 性能良好,但對於複雜應用程序,ThinkPHP 可能更適合。

開發建議:如何利用ThinkPHP框架實現非同步任務 開發建議:如何利用ThinkPHP框架實現非同步任務 Nov 22, 2023 pm 12:01 PM

《開發建議:如何利用ThinkPHP框架實現非同步任務》隨著網路技術的快速發展,Web應用程式對於處理大量並發請求和複雜業務邏輯的需求也越來越高。為了提高系統的效能和使用者體驗,開發人員常常會考慮利用非同步任務來執行一些耗時操作,例如發送郵件、處理文件上傳、產生報表等。在PHP領域,ThinkPHP框架作為一個流行的開發框架,提供了一些便捷的方式來實現非同步任務。

thinkphp怎麼安裝 thinkphp怎麼安裝 Apr 09, 2024 pm 05:42 PM

ThinkPHP 安裝步驟:準備 PHP、Composer、MySQL 環境。使用 Composer 建立專案。安裝 ThinkPHP 框架及相依性。配置資料庫連線。產生應用程式碼。啟動應用程式並造訪 http://localhost:8000。

thinkphp效能怎麼樣 thinkphp效能怎麼樣 Apr 09, 2024 pm 05:24 PM

ThinkPHP 是一款高效能的 PHP 框架,具備快取機制、程式碼最佳化、平行處理和資料庫最佳化等優勢。官方性能測試顯示,它每秒可處理超過 10,000 個請求,實際應用中被廣泛用於京東商城、攜程網等大型網站和企業系統。

開發建議:如何利用ThinkPHP框架進行API開發 開發建議:如何利用ThinkPHP框架進行API開發 Nov 22, 2023 pm 05:18 PM

開發建議:如何利用ThinkPHP框架進行API開發隨著網際網路的不斷發展,API(ApplicationProgrammingInterface)的重要性也日益凸顯。 API是不同應用程式之間進行通訊的橋樑,它可以實現資料共享、功能呼叫等操作,為開發者提供了相對簡單且快速的開發方式。而ThinkPHP框架作為一款優秀的PHP開發框架,具有高效能、可擴展且易用

See all articles