在我的情况下,我在本地没有users
表,但我有一个api,它会为我提供一个用户列表。
我在getUsers()
Auth::user()
修改了app/Auth/ApiUserProvider.php
protected function getUsers()
{
$ch = curl_init();
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_URL, env('API_HOST') . 'vse/accounts');
$response = curl_exec($ch);
$response = json_decode($response, true);
curl_close($ch);
return $response['data'];
}
每一次,我都在代码中使用了Auth::user()
。它调用了我的API .../vse/accounts
它会在我的应用程序中产生大量延迟。
会话
protected function getUsers()
{
if(Session::has('user')){
return Session::get('user');
}else{
$ch = curl_init();
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_URL, env('API_HOST') . 'vse/accounts');
$response = curl_exec($ch);
$response = json_decode($response, true);
curl_close($ch);
$user = $response['data'];
Session::put('user',$user);
return $user;
}
}
结果
需要2秒钟。 :(
缓存
protected function getUsers()
{
$minutes = 60;
$value = Cache::remember('user', $minutes, function() {
//your api stuff
$ch = curl_init();
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_URL, env('API_HOST') . 'vse/accounts');
$response = curl_exec($ch);
$response = json_decode($response, true);
curl_close($ch);
$user = $response['data'];
return $user;
});
}
我该如何解决这个问题?
我应该开始使用缓存吗?如果是这样,我该如何修改我必须做的事情呢?
我应该将它存储在会话中吗?
我现在可以接受任何建议。
对此的任何提示/建议将不胜感激!
答案 0 :(得分:1)
你可以这样做
protected function getUsers() {
$minutes = 60;
$user = Cache::remember('user', $minutes, function () {
//your api stuff
$ch = curl_init();
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_URL, env('API_HOST') . 'vse/accounts');
$response = curl_exec($ch);
$response = json_decode($response, true);
curl_close($ch);
return $response['data'];
});
return $user;
}
这应该有效
有时您可能希望从缓存中检索项目,但也可以 如果请求的项目不存在,则存储默认值 -laravel docs
您将从缓存中获取用户,或者,如果他不存在,则从api中检索用户并将其添加到缓存中