#### 請求緩存
請求緩存的原理是第一次請求的時候會根據當前請求的緩存標識把響應輸出的內容緩存起來并且設置HTTP緩存(如果判斷已經存在請求緩存的話會直接讀取請求緩存并且設置HTTP緩存),當第二次訪問相同的請求標識的時候,會自動讀取HTTP緩存(也就是瀏覽器緩存)內容而不是真實的調用請求方法,也就是說請求緩存是`HTTP緩存+響應(數據)緩存`的合體。
如果你需求全局使用請求緩存的話,在應用配置中設置下面的兩個配置參數:
~~~
'request_cache' => true,
'request_cache_expire' => 600,
~~~
上面的設置會開啟全局請求緩存,默認的緩存標識為當前請求的URL地址(做md5編碼處理),并且緩存有效期為600秒,也就是說10分鐘之內的相同get請求(請求緩存只支持GET請求)會進行緩存,可以有效提升性能。
我們使用hello方法進行測試:
~~~
<?php
namespace app\index\controller;
class Index
{
public function hello()
{
return '當前請求時間:' . date('y-m-d H:i:s', request()->time());
}
}
~~~
第一次訪問
~~~
http://tp5.com/index/index/hello
~~~
再次訪問的時候顯示(注意頁面輸出的請求時間并沒有變化):
當給當前URL地址增加參數后再次訪問后會發現請求緩存已經無效了(因為全局請求緩存默認是根據URL地址緩存)。

如果需要設置個別請求的緩存參數,可以在路由規則中設置,例如:
~~~
// 定義路由規則 并設置3600秒的緩存
Route::get('blog/:id','index/Blog/read',['cache'=>3600]);
~~~
路由的請求緩存默認標識是當前的pathinfo地址,也支持指定緩存標識,例如:
~~~
// 定義路由規則 并設置3600秒的緩存
Route::get('blog/:id','index/Blog/read',['cache'=>['blog/:id/:page',3600]]);
~~~
緩存標識中的:id 和 :page 都會被替換成當前請求變量的值。
路由規則中的緩存參數是優先的,并且不依賴全局請求緩存設置,如果你只需要部分請求使用請求緩存功能,那么可以直接在路由規則中設置。