我想知道对于每个可能的结果,是否可以将函数的结果存储在缓存中。
这不是下面的确切示例,真正的示例要复杂得多,出于速度的原因,我需要缓存结果,但这让您对我试图实现的目标有了一个概念
例如,我有一个检索用户评论的函数:
public function getUserComments(User $user)
{
$comments = DB::table('comments')->where('user_id',$user->id)->get();
return $comments;
}
我需要在我的系统中为每个单独的用户保存所有可能的结果。
例如,如果我有100个用户:
foreach ($users as $user) {
$cachedResults [] = $user->getUserComments();
}
现在,我有了更快查看的缓存结果:$cachedResults
发布于 2018-08-14 23:11:18
下面这样的代码应该能起到作用(未经过测试):
public function getUserComments(User $user)
{
$key = "comments-${$user->id}";
$comments = Cache::remember($key, 60, function () {
return DB::table('comments')->where('user_id',$user->id)->get();
});
return $comments
}
60是这里的分钟数。如果您想要的不是默认的东西,就必须配置缓存,即file
缓存驱动程序。
发布于 2018-08-14 23:25:53
我同意Stephan answer的观点,您可以使用特定的键来保存值,或者您可以使用tags,如下所示:
Cache::tags(['users', $name])->remember('model', 60, function () {
// [...]
});
我更喜欢第二种方法,因为如果你在数据库上做了一些更改,它更容易管理……
例如,您可以使用['users', $name]
标记来存储引用特定用户的多个键,例如comments
关系。
当您对用户模型进行更改时,您将仅使用‘['users', $name]
’键刷新模型标记。
如果删除用户,将刷新['users', $name]
标记;如果执行批量删除,将刷新users
标记,以便清除缓存中存储的所有用户。
当然,您必须使用支持标记的缓存驱动程序。
https://stackoverflow.com/questions/51844344
复制相似问题