【问题标题】:How to cache results of a function in laravel如何在laravel中缓存函数的结果
【发布时间】:2019-01-21 11:36:02
【问题描述】:

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

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

例如我有一个检索用户 cmets 的函数:

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

【问题讨论】:

标签: php database laravel caching laravel-5


【解决方案1】:

我同意Stephan answer,您可以使用特定键保存值,或者您可以使用tags,类似:

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

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

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

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

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

当然你必须使用允许标签的缓存驱动。

【讨论】:

    【解决方案2】:

    这样的事情应该可以解决问题(未经测试):

    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 缓存驱动程序,则必须配置缓存。

    【讨论】:

      猜你喜欢
      • 2010-11-13
      • 2019-09-01
      • 2011-01-18
      • 1970-01-01
      • 2011-01-14
      • 1970-01-01
      • 1970-01-01
      • 2011-08-30
      • 1970-01-01
      相关资源
      最近更新 更多