首页 > 解决方案 > 如何在laravel中缓存函数的结果

问题描述

我想知道是否可以为每个可能的结果将函数的结果存储在缓存中。

这不是下面的确切示例,实际示例要复杂得多,出于速度原因,我需要缓存结果,但这让您了解我要完成的工作

例如,我有一个检索用户评论的函数:

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

标签: phpdatabaselaravelcachinglaravel-5

解决方案


我同意斯蒂芬的回答,您可以使用特定键保存值,或者您可以使用标签,例如:

Cache::tags(['users', $name])->remember('model', 60, function () {
    // [...]
});

我更喜欢第二种方法,因为如果您对数据库进行一些更改,它很容易管理......

例如,您可以使用['users', $name]标签来存储引用特定用户的多个键,例如comments关系。

当您对用户模型进行更改时,您只会['users', $name]使用“模型”键刷新标签。

如果您删除用户,您将刷新['users', $name]标签,如果您执行批量删除,您将刷新users标签以清除缓存中存储的所有用户。

当然,您必须使用允许标签的缓存驱动程序。


推荐阅读