php - 在 Laravel 中预加载中间件/响应缓存?
问题描述
我在 Laravel 中使用中间件缓存了一些响应值,如下所示:
public function handle($request, Closure $next)
{
$domain = parse_url($request->headers->get('origin'), PHP_URL_HOST);
$key = 'request|'.$domain.'|dashboard';
return cache()->rememberForever($key, function () use ($request, $next) {
return $next($request);
});
}
如果该响应函数中的值发生变化,我想重置缓存,并且最好在任何用户体验加载时间之前预先设置它。
但是,鉴于我将缓存值设置为闭包,我不完全确定如何处理 - $next($request)
。本质上,它正在缓存实际的序列化响应。
有没有一种简单的方法可以让我以编程方式模拟这个响应?
编辑:澄清 - 上述功能工作正常,我想要的是如下所示:
public function resetCache($key)
{
// Clear out old cache:
cache()->forget($key);
// Preload new cache:
cache()->set($key, function ($request, $next) {
return $next($request);
});
}
显然,上面的函数不起作用,因为我在$request
or上没有上下文$next
。
我开始认为我会以错误的方式处理这个问题,本质上。
解决方案
尝试这个:
public function handle($request, Closure $next)
{
$domain = parse_url($request->headers->get('origin'), PHP_URL_HOST);
$key = 'request|'.$domain.'|dashboard';
$response = $next($request);
if($response !== Cache:get($key)) {
Cache:forget($key);
}
return cache()->rememberForever($key, function () use ($reponse) {
return $response;
});
}
推荐阅读
- kubernetes - 基于命名空间的单独filebeat守护进程集?
- xml - 使用 Zapier 将 XML 发送到 URL
- r - facet_wrap 并将颜色分配给ggplot2中的分类变量
- sql - 需要一条 SQL 语句来返回按常用代码分组的 MAX of Computed Value
- java - 如何使用 android Java 获取 API 28 和 29 的 SSID?
- java - 搜索不显示结果
- windows - 为什么 set /p 只从管道中获取 1 行?
- ruby - 如何断开 twitter gem 与 Thread 内的流式传输
- javascript - 启用自动用户身份验证到 Azure AD 并重定向到网页的 Javascript 代码
- python - 如何在 Matplotlib 图中移动轴并重新定义原点?