首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在laravel中缓存函数的结果

如何在laravel中缓存函数的结果
EN

Stack Overflow用户
提问于 2018-08-14 22:54:38
回答 2查看 574关注 0票数 0

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

这不是下面的确切示例,真正的示例要复杂得多,出于速度的原因,我需要缓存结果,但这让您对我试图实现的目标有了一个概念

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

代码语言:javascript
运行
复制
public function getUserComments(User $user)
{
    $comments = DB::table('comments')->where('user_id',$user->id)->get();
    return $comments;
}

我需要在我的系统中为每个单独的用户保存所有可能的结果。

例如,如果我有100个用户:

代码语言:javascript
运行
复制
foreach ($users as $user) {
       $cachedResults [] = $user->getUserComments();
}

现在,我有了更快查看的缓存结果:$cachedResults

EN

回答 2

Stack Overflow用户

发布于 2018-08-14 23:11:18

下面这样的代码应该能起到作用(未经过测试):

代码语言:javascript
运行
复制
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缓存驱动程序。

票数 0
EN

Stack Overflow用户

发布于 2018-08-14 23:25:53

我同意Stephan answer的观点,您可以使用特定的键来保存值,或者您可以使用tags,如下所示:

代码语言:javascript
运行
复制
Cache::tags(['users', $name])->remember('model', 60, function () {
    // [...]
});

我更喜欢第二种方法,因为如果你在数据库上做了一些更改,它更容易管理……

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

当您对用户模型进行更改时,您将仅使用‘['users', $name]’键刷新模型标记。

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

当然,您必须使用支持标记的缓存驱动程序。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51844344

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档