## 请求缓存
支持请求缓存功能,支持对GET请求设置缓存访问,并设置有效期。
> 请求缓存仅对GET请求有效
有两种方式可以设置请求缓存:
### 路由设置
可以在路由规则里面调用`cache`方法设置当前路由规则的请求缓存,例如:
~~~
// 定义GET请求路由规则 并设置3600秒的缓存
Route::get('new/:id','News/read')->cache(3600);
~~~
第二次访问相同的路由地址的时候,会自动获取请求缓存的数据响应输出,并发送`304`状态码。
默认请求缓存的标识为当前访问的`pathinfo`地址,可以定义请求缓存的标识,如下:
~~~
// 定义GET请求路由规则 并设置3600秒的缓存
Route::get('new/:id','News/read')->cache(
[
'new/:id/:page', 3600
]
);
~~~
`:id`、`:page`表示使用当前请求的`param`参数进行动态标识替换,也就是根据`id`和`page`变量进行`3600`秒的请求缓存。
> 如果`cache`参数传入`false`,则表示关闭当前路由的请求缓存(即使开启全局请求缓存)。
支持给一组路由设置缓存标签
~~~
// 定义GET请求路由规则 并设置3600秒的缓存
Route::get('new/:id','News/read')->cache(
[
'new/:id/:page', 3600, 'page'
]
);
~~~
这样可以在需要的时候统一清理缓存标签为`page`的请求缓存。
### 动态设置
可以在公共文件或者行为中动态设置请求缓存,例如:
~~~
Request::cache('blog/:id',3600);
~~~
表示对`blog/:id`定义的动态访问地址进行`3600`秒的请求缓存。
> 变量支持当前的请求变量(也就是`param`方法的所有变量)。
可以使用当前的URL地址作为缓存标识,如下:
~~~
Request::cache('__URL__',600);
~~~
支持对某个URL后缀的请求进行缓存,例如:
~~~
Request::cache('[html]',600);
~~~
表示对所有的`html`后缀访问(GET)请求进行10分钟的缓存。
也支持设置请求缓存标签,例如:
~~~
Request::cache('blog/:id/:page',3600, 'page');
~~~
## 自动缓存
可以通过开启自动缓存和全局缓存有效期设置请求缓存,支持在模块配置中单独设置开启请求缓存。
只需要在配置文件中开启:
~~~
'request_cache' => true,
'request_cache_expire' => 3600,
~~~
就会自动根据当前请求URL地址(只针对GET请求类型)进行请求缓存,全局缓存有效期为3600秒。
如果需要对全局缓存设置缓存规则,可以直接设置`request_cache`参数为字符串,例如下面的方式:
~~~
'request_cache' => '__URL__',
'request_cache_expire' => 3600,
~~~
缓存标识支持下面的特殊定义
| 标识 | 含义 |
| --- | --- |
| `__MODULE__` | 当前模块名 |
| `__CONTROLLER__` | 当前控制器名 |
| `__ACTION__` | 当前操作名 |
| `__URL__` | 当前完整URL地址(包含域名) |
全局请求缓存支持设置排除规则,使用方法如下:
~~~
'request_cache' => true,
'request_cache_expire' => 3600,
'request_cache_except' => [
'/blog/index',
'/user/member',
],
~~~
排除规则为不使用请求缓存的地址(不支持变量)开头部分(不区分大小写)。
> 路由中设置的请求缓存依然有效并且优先,如果需要设置特殊的请求缓存有效期就可以直接在路由中设置。