Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/laravel/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php Laravel正在创建缓存,但加载时间相同_Php_Laravel_Caching_Laravel 7 - Fatal编程技术网

Php Laravel正在创建缓存,但加载时间相同

Php Laravel正在创建缓存,但加载时间相同,php,laravel,caching,laravel-7,Php,Laravel,Caching,Laravel 7,所以我试图在我的一个控制器上缓存一个查询,在大约12-19秒内返回大约30k条记录,这显然是不可接受的。我正在尝试集成基本缓存,虽然我看到加载页面后缓存文件出现在项目中,但我加载结果的时间仍然是一样的。有人知道为什么会这样吗?我对Laravel比较陌生–是否还有其他地方可以使用这种缓存?我还看到了路由级别缓存的各种示例 public function index() { $questions = Cache::remember('questions', 60*60*24, functio

所以我试图在我的一个控制器上缓存一个查询,在大约12-19秒内返回大约30k条记录,这显然是不可接受的。我正在尝试集成基本缓存,虽然我看到加载页面后缓存文件出现在项目中,但我加载结果的时间仍然是一样的。有人知道为什么会这样吗?我对Laravel比较陌生–是否还有其他地方可以使用这种缓存?我还看到了路由级别缓存的各种示例

public function index()
{
    $questions = Cache::remember('questions', 60*60*24, function() {
        return Question::with('tags')
        ->orderBy('updated_at', 'desc')
        ->with('exams.class')
        ->with('assignment.course')
        ->get();
    });

    $archived_questions = Cache::remember('archived-questions', 60*60*24, function() {
        return Question::onlyTrashed()->with('tags')
            ->orderBy('deleted_at', 'desc')
            ->get();
    });


    return view('admin.index', ['questions' => $questions, 'archivedQuestions' => $archived_questions]);
}

您正在为每个索引操作设置缓存,这意味着每次加载页面时,您都在运行该查询并将其分配给缓存

试试这个

public function index()
{
    if (Cache::has('questions')) {
        $questions = Cache::get('questions');
    } else {
        $questions = Cache::remember('questions', 60*60*24, function() {
            return Question::with('tags')
            ->orderBy('updated_at', 'desc')
            ->with('exams.class')
            ->with('assignment.course')
            ->get();
        });
    }

    if (Cache::has('archivedQuestions')) {
        $archivedQuestions= Cache::get('archivedQuestions');
    } else {
        $archived_questions = Cache::remember('archived-questions', 60*60*24, function() {
            return Question::onlyTrashed()->with('tags')
                ->orderBy('deleted_at', 'desc')
                ->get();
        });
    }
    return view('admin.index', ['questions' => $questions, 'archivedQuestions' => $archived_questions]);
}

看看这些文件;特别是“从缓存中检索项”

只需检查一下,您是否已将索引和外键添加到这些表中?呵呵,他们查过了。谢谢你的回复!不幸的是,这似乎并没有改变事情——还有你所说的问题,不记得()既要检查缓存是否存在,也要注册缓存(如果不存在)?你是对的,也许我应该阅读文档lol,你能运行
php artisan cache:clear
并让我知道你是否仍然遇到同样的问题吗?如果这真的失败了。尝试复制我的代码并在每个“其他”条件中打印,以查看它是否到达那里