3 回答
TA贡献2041条经验 获得超4个赞
这实际上是一个非常简单的解决问题。在您的函数getLeaders()中,您需要修改代码:
public function getLeaders(){
$leadersCache = Cache::get("leaders", null);
if($leadersCache){
return response()->json(["leaders", $leadersCache], 200);
}
$leaders = Leader::where(...)->get();
Cache::put("leaders", $leaders, 5);
return response(["leaders", $leaders], 200);
}
所以,它的作用是首先检查"leaders"缓存中是否存在。如果是这样,它将简单地返回。如果没有(第一次调用此路由时就是这种情况),那么它将进行计算,并使用Cache::put(),将其存储在缓存中,然后返回。在接下来的 5 分钟内,只要这条路由被命中,它就会返回缓存的结果,直到进程重新开始。
请注意,上面是伪代码,因为没有显示您的 Controller,但该方法可以轻松适应现有代码。此外,您可能需要use Cache;在控制器顶部包含,或Cache通过参考\Cache::{method}
有关缓存的所有内容都可以在文档中找到:https ://laravel.com/docs/5.7/cache
TA贡献1789条经验 获得超10个赞
要添加到@TimLewis 的答案,如果您使用的是 laravel 5.8 或更高版本,那么 Cache::remember 函数可以大大简化控制器代码
public function getLeaders(){
$leaders = Cache::remember('leaders', 300, function () {
return Leader::where(...)->get();
});
return response()->json(['leaders' => $leaders]);
}
该Cache::remember函数负责整个缓存工作流程,它首先检查缓存中的领导者对象,如果存在则返回。如果不是,它运行闭包内的代码并将结果存储在第一个参数中指定的键下的缓存中,持续第二个参数中指定的秒数。因此,在这种情况下,它会将结果缓存在关键“领导者”下 300 秒(5 分钟)。
TA贡献1856条经验 获得超17个赞
Laravel > 7 你可以使用 cash::rmember(),你会节省很多写少例子:
$getleaders = Cache::remember('getleaders', 'minutes', function () {
u query;
});
- 3 回答
- 0 关注
- 181 浏览
添加回答
举报