增加请求缓存功能 路由支持设置请求缓存

This commit is contained in:
thinkphp
2016-09-24 18:14:59 +08:00
parent 13b345c889
commit 450d7ab313
3 changed files with 43 additions and 2 deletions

View File

@@ -119,6 +119,8 @@ class Request
protected $bind = []; protected $bind = [];
// php://input // php://input
protected $input; protected $input;
// 请求缓存
protected $cache;
/** /**
* 架构函数 * 架构函数
@@ -1453,6 +1455,30 @@ class Request
return $token; return $token;
} }
/**
* 读取缓存
* @access public
* @param string $key 缓存标识
* @param mixed $expire 静态有效期
* @return mixed
*/
public function cache($key, $expire = null)
{
if (Cache::has($key)) {
// 读取缓存
$content = Cache::get($key);
$response = Response::create($content)->header('Content-Type', Cache::get($key . '_header'));
throw new \think\exception\HttpResponseException($response);
} else {
$this->cache = [$key, $expire];
}
}
public function getCache()
{
return $this->cache;
}
/** /**
* 设置当前请求绑定的对象实例 * 设置当前请求绑定的对象实例
* @access public * @access public

View File

@@ -11,9 +11,11 @@
namespace think; namespace think;
use think\Cache;
use think\Config; use think\Config;
use think\Debug; use think\Debug;
use think\Env; use think\Env;
use think\Request;
use think\response\Json as JsonResponse; use think\response\Json as JsonResponse;
use think\response\Jsonp as JsonpResponse; use think\response\Jsonp as JsonpResponse;
use think\response\Redirect as RedirectResponse; use think\response\Redirect as RedirectResponse;
@@ -111,6 +113,14 @@ class Response
} }
echo $data; echo $data;
if (200 == $this->code) {
$cache = Request::instance()->getCache();
if ($cache) {
Cache::set($cache[0], $data, $cache[1]);
Cache::set($cache[0] . '_header', $this->header['Content-Type']);
}
}
if (function_exists('fastcgi_finish_request')) { if (function_exists('fastcgi_finish_request')) {
// 提高页面响应 // 提高页面响应
fastcgi_finish_request(); fastcgi_finish_request();

View File

@@ -1292,6 +1292,7 @@ class Route
*/ */
private static function parseRule($rule, $route, $pathinfo, $option = [], $matches = [], $merge = false) private static function parseRule($rule, $route, $pathinfo, $option = [], $matches = [], $merge = false)
{ {
$request = Request::instance();
// 解析路由规则 // 解析路由规则
if ($rule) { if ($rule) {
$rule = explode('/', $rule); $rule = explode('/', $rule);
@@ -1364,13 +1365,13 @@ class Route
$bind[$key] = $result; $bind[$key] = $result;
} }
} }
Request::instance()->bind($bind); $request->bind($bind);
} }
// 解析额外参数 // 解析额外参数
self::parseUrlParams(empty($paths) ? '' : implode('/', $paths), $matches); self::parseUrlParams(empty($paths) ? '' : implode('/', $paths), $matches);
// 记录匹配的路由信息 // 记录匹配的路由信息
Request::instance()->routeInfo(['rule' => $rule, 'route' => $route, 'option' => $option, 'var' => $matches]); $request->routeInfo(['rule' => $rule, 'route' => $route, 'option' => $option, 'var' => $matches]);
// 检测路由after行为 // 检测路由after行为
if (!empty($option['after_behavior'])) { if (!empty($option['after_behavior'])) {
@@ -1410,6 +1411,10 @@ class Route
// 路由到模块/控制器/操作 // 路由到模块/控制器/操作
$result = self::parseModule($route); $result = self::parseModule($route);
} }
// 开启请求缓存
if ($request->isGet() && !empty($option['cache'])) {
$request->cache($pathinfo, $option['cache']);
}
return $result; return $result;
} }