- _nosay
Laravel使用Midderware完成整页缓存
2017-08-21 19:06:39
以前一直使用一个叫page-cache的包,来生成静态的html文件,在nginx中rewrite指向,使网站打开速度飞快。
但是随着页面复杂化发后,发现此功能越来越不能满足需求了,现在只能送它两个字:爱过!
现在我们使用redis制作一个中间层,把页面响应内容保存起来,以当前的url为键储存起来,从而实现整站缓存的目的。使一此比较复杂的应用都能共享此功能,从而给网站提速。
首先我们要在控制台生成相应的 midderware
php artisan make:middleware CachePage
然后在此文件中,写入如下代码:
<?php
namespace App\Http\Middleware;
use Closure;
use Cache;
class CachePage
{
/**
* Handle an incoming request.
*
* @param \Illuminate\Http\Request $request
* @param \Closure $next
* @return mixed
*/
public function handle($request, Closure $next)
{
$key = $request->fullUrl(); //key for caching/retrieving the response value
if (Cache::has($key)) //If it's cached...
return response(Cache::get($key)); //... return the value from cache and we're done.
$response = $next($request); //If it wasn't cached, execute the request and grab the response
$cachingTime = 60; //Let's cache it for 60 minutes
Cache::put($key, $response->getContent(), $cachingTime); //Cache response
return $response;
}
}下一步当然要去app\Http\Kernel.php中去注册一下啦,在$routeMiddleware数组中加入,
'cachepage' => \App\Http\Middleware\CachePage::class,
至此,整页缓存中间键就已经搞好了,使用只需同要路由中指定
'middleware' => 'cachepage'
就可以啦。