#### 请求缓存
请求缓存的原理是第一次请求的时候会根据当前请求的缓存标识把响应输出的内容缓存起来并且设置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地址缓存)。
![](https://box.kancloud.cn/4cc36cbd28b179801f4b8afea8820a35_926x934.png)
如果需要设置个别请求的缓存参数,可以在路由规则中设置,例如:
~~~
// 定义路由规则 并设置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 都会被替换成当前请求变量的值。
路由规则中的缓存参数是优先的,并且不依赖全局请求缓存设置,如果你只需要部分请求使用请求缓存功能,那么可以直接在路由规则中设置。