Laravel 中缓存驱动的速度比较 (2)

...然后我们增加一个路由 app/Http/routes.php 指向这个文章控制器的 index 方法:

Route::group(['prefix' => 'api'], function() { Route::get('articles', 'ArticlesController@index'); });

现在我们的数据库都是用样本数据建立起来的,我们可以进行测试了。

未使用缓存的响应

让我们看看我们传统的控制器方法是什么样的,没有缓存,处理响应需要多长时间,在 index() 方法中,返回文章的资源数据:

public function index() { $articles = Articles::all(); return response()->json($articles); }

你也可以使用 Postman 去请求() 或者直接用浏览器打开,你就可以看到如下所示。

Laravel 中缓存驱动的速度比较

请注意在本地开发服务器上完成此请求所花费的时间。

从缓存中返回的响应

现在让我们尝试使用缓存,看看数据响应所花费的时间是否会有显着差异。修改 index()方法为:

public function index() { $articles = Cache::remember('articles', 22*60, function() { return Article::all(); }); return response()->json($articles); }

现在我们使用 remember() 方法缓存了文章,缓存时间为 22 小时,再次运行并观察所花费的时间,可以看我的截图:

Laravel 中缓存驱动的速度比较

结果和建议

在我的标准开发环境中测试得出,使用缓存时产生响应所需的时间比没有使用的时候要少:

未使用缓存 Server Hits Time
1st   4478ms  
2nd   4232ms  
3rd   2832ms  
4th   3428ms  
Avg   3742ms  
使用缓存 (File 驱动) Server Hits Time
1st   4255ms  
2nd   3182ms  
3rd   2802ms  
4th   3626ms  
Avg   3466ms  
使用缓存 (Memcached 驱动) Server Hits Time
1st   3626ms  
2nd   566ms  
3rd   1462ms  
4th   1978ms  
Avg   1908ms :)  
使用缓存 (Redis 驱动)

这里需要通过 composer 安装 predis/predis 包

Server Hits Time
1st   3549ms  
2nd   1612ms  
3rd   920ms  
4th   575ms  
Avg   1664ms :)  

是不是很酷呢?这里有两点需要注意:

即使使用了缓存,第一次请求响应还是需要比较多的时间,因为当第一次请求的时候缓存里面还是空的。

与 file 驱动相比,Memcached 和 Redis 的速度更快,所以建议在项目较大时使用外部缓存驱动。

结论

使用文件、数据库作为驱动,两者在速度上没有很明显的区别。但是如果我们使用第三方服务作为驱动, 可以很明显地看到性能提升。所以投资高速缓存是值得的。

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zzdyjd.html