我正在一个Laravel 8项目中工作,该项目被用作后端的API。我使用MongoDB作为我的数据库和Redis服务器。
我已经使用predis在我的项目中配置了Redis,并且可以确认缓存确实存储和检索正确,但是我最近注意到的是缓存根本没有存储的奇怪行为,我知道这一点,因为每次查询1000万行的请求需要8秒,而且应该是几百个。
如果我通过浏览器向单个Application发出请求,那么任何超过第一个请求半小时的请求都应该被缓存和快速处理,但是都是缓慢的,如果我在tinker中运行Application查找,然后加载我的视图,那么它是缓存的,因为它是立即加载的吗?
这里发生了什么,我的代码可能遗漏了什么?
/**
* Display the specified resource.
*
* @param \App\Models\Application $application
* @return \Illuminate\Http\Response
*/
public function show(Application $application)
{
$application = Cache::store('redis')->remember("application:$application", Carbon::now()->addMinutes(30), function () use ($application) {
return Application::with([
'payday', 'response', 'apiLinks'
])->find($application)->first();
});
return response()->json([
'application' => $application
], 200);
}发布于 2022-06-16 09:00:51
好的,您似乎在这里使用模型绑定,但是您打算缓存模型。绑定模型不缓存。将代码更改为:
/**
* Display the specified resource.
*
* @param int $application
* @return \Illuminate\Http\Response
*/
public function show($application)
{
$application = Cache::store('redis')->remember("application:$application", Carbon::now()->addMinutes(30), function () use ($application) {
return Application::with([
'payday', 'response', 'apiLinks'
])->find($application)->first();
});
return response()->json([
'application' => $application
], 200);
}为了提醒您,如果您执行Route::get('application/{application}', function (Application $application) { ... });,即在函数定义中提供一个类型,Laravel将尝试自动检索由路由参数提供的模型(正如我前面提到的,称为路由模型绑定)。但是,由于您希望缓存模型,所以不应该允许这种情况发生。
https://stackoverflow.com/questions/72634354
复制相似问题