从 Laravel 的缓存中加载刀片视图文件

番茄

我正在尝试将带有参数的整个刀片视图存储在缓存中以进行首次加载,并在下次重新加载时从缓存中加载它。

这是我所做的:

public function cacheAction()
{
    $data = $this->model->getContent();
    Cache::remember('cache-view', 1800, function() {
        dd('load from cache!');
        return view('index')->render();
    });
    dd('not load from cache!');
    return view('index', ['data' => $data]);
    
}

我在加载页面时添加了 2 行调试通知。但是当我访问页面时,它总是显示“未从缓存中加载!” 随时。

我该如何解决这个问题?

非常感谢你!

伪经

你在这里有相反的方式。remember回调中的函数运行时,它不会从缓存中加载。当它不运行时,它会从缓存中加载。但是,您实际上并没有在此处使用缓存中的结果。您可以执行以下操作来利用缓存:

public function cacheAction()
{
    $view = Cache::remember('cache-view', 1800, function() {
        $data = $this->model->getContent();
        return view('index', ['data' => $data]);
    });
    return $view;    
}

请注意,您的cache-view缓存键实际上并不依赖于内容,$data因此如果$data更改,您将获得陈旧的缓存视图。以下是解决此问题的方法:

public function cacheAction()
{
    $data = $this->model->getContent();
    $cacheKey = md5(serialize($data)); // Make sure data is serializable
    $view = Cache::remember('cache-view-'.$cacheKey, 1800, function() use ($data) {
        return view('index', ['data' => $data]);
    });
    return $view;    
}

然而,这确实具有总是读取$data以检查缓存是否陈旧的缺点。哪种解决方案适合您,取决于您的数据是静态的还是动态的。如果您不希望数据经常更改,那么人们看到最多 1800 秒的陈旧数据可能不是一个大问题

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

无法在Laravel刀片文件中加载图像

无法在Laravel 8的刀片文件中加载Vue组件

Laravel 5 如何从控制器传递单个变量并在刀片视图文件中捕获相同的变量?

想要在 foreach 循环中获取数据库记录,这是在 laravel 刀片/视图文件中?

Laravel 5-从存储文件夹加载视图刀片文件

Laravel-刀片未在浏览器中加载

Laravel + Vue 在刀片上的 @foreach 中加载组件

Laravel在单个函数中加载多个视图

Laravel-Termplate刀片未加载内部视图

Laravel 5.1,在视图文件中使用变量名

如何在laravel中设置视图文件路径?

Laravel 5.5视图文件中session('status')的目的?

Laravel-包括动态子视图文件名

Laravel 9.x 找不到视图文件

Laravel - 反复删除视图文件夹

php 代码在 Laravel 视图文件中工作,但核心简单的 Laravel 代码不在 Laravel 视图文件中(laravel 版本:5.2.45)

如何在 laravel 刀片视图中包含外部 php 文件

刀片视图中的Laravel查询

Laravel if 在刀片视图上的语句

从Laravel的刀片视图导出Excel

Laravel-在刀片中加载更多结果时如何避免N + 1问题?

Laravel 5视图缓存

Laravel 视图中未加载 CSS 文件

在视图文件中显示存储在公用文件夹外部的图像-Laravel

图像未在刀片视图中加载

Laravel刀片文件的命名约定

布局文件未在Laravel中加载任何CSS或JavaScript

本地主机未在laravel中加载项目文件

如何在Codeigniter的核心功能中加载视图文件