Laravel ResponseCache 中间件详解:CacheResponse 与 DoNotCacheResponse 实战

张开发
2026/6/9 23:28:54 15 分钟阅读
Laravel ResponseCache 中间件详解:CacheResponse 与 DoNotCacheResponse 实战
Laravel ResponseCache 中间件详解CacheResponse 与 DoNotCacheResponse 实战【免费下载链接】laravel-responsecacheSpeed up a Laravel app by caching the entire response项目地址: https://gitcode.com/gh_mirrors/la/laravel-responsecacheLaravel ResponseCache 是一个强大的 Laravel 扩展包能够通过缓存整个响应来显著提升应用性能。本文将深入解析其核心中间件 CacheResponse 与 DoNotCacheResponse 的工作原理和实战应用帮助开发者轻松实现响应缓存策略。一、CacheResponse高效缓存响应的核心中间件CacheResponse 中间件是实现响应缓存的核心组件位于src/Middlewares/CacheResponse.php。它通过以下步骤实现响应缓存1.1 工作流程解析当请求进入应用时CacheResponse 中间件会首先检查是否启用缓存且不需要绕过缓存。如果条件满足它会尝试从缓存中获取响应若缓存命中则直接返回缓存的响应并触发ResponseCacheHit事件若缓存未命中或缓存无效则继续处理请求待响应生成后缓存该响应核心代码逻辑如下// 检查缓存是否命中 if ($this-responseCache-hasBeenCached($request, $tags)) { $response $this-getCachedResponse($request, $tags); if ($response ! false) { return $response; } } // 缓存未命中继续处理请求 $response $next($request); // 缓存新生成的响应 if ($this-responseCache-shouldCache($request, $response)) { $this-makeReplacementsAndCacheResponse($request, $response, $lifetimeInSeconds, $tags); }1.2 灵活的缓存配置CacheResponse 支持通过参数自定义缓存时长和标签// 缓存10分钟 Route::get(/posts, PostControllerindex)-middleware(cacheResponse:600); // 缓存1小时并添加标签 Route::get(/posts, PostControllerindex)-middleware(cacheResponse:3600,posts);二、DoNotCacheResponse精准控制不缓存的场景DoNotCacheResponse 中间件位于src/Middlewares/DoNotCacheResponse.php提供了简单而有效的方式来排除特定路由的缓存。2.1 实现原理该中间件通过向请求属性中添加responsecache.doNotCache标记来告诉响应缓存系统不要缓存当前请求的响应public function handle(Request $request, Closure $next) { $request-attributes-add([responsecache.doNotCache true]); return $next($request); }2.2 适用场景以下场景特别适合使用 DoNotCacheResponse用户个人中心页面购物车页面需要实时数据的页面表单提交后的响应使用方法非常简单只需在路由中添加中间件Route::get(/user/profile, UserControllerprofile)-middleware(doNotCacheResponse);三、实战应用缓存策略最佳实践3.1 基础缓存配置首先通过 Composer 安装扩展包composer require spatie/laravel-responsecache然后发布配置文件php artisan vendor:publish --providerSpatie\ResponseCache\ResponseCacheServiceProvider配置文件位于config/responsecache.php可以在这里设置默认缓存时长、缓存存储方式等。3.2 路由级别的缓存控制// 缓存首页默认时长 Route::get(/, HomeControllerindex)-middleware(cacheResponse); // 缓存文章列表1小时 Route::get(/articles, ArticleControllerindex)-middleware(cacheResponse:3600); // 不缓存文章详情页 Route::get(/articles/{id}, ArticleControllershow)-middleware(doNotCacheResponse);3.3 缓存标签与清除策略使用标签可以实现更精细的缓存管理// 添加标签缓存 Route::get(/products, ProductControllerindex)-middleware(cacheResponse:3600,products); // 当产品更新时仅清除products标签的缓存 ResponseCache::tags(products)-clear();3.4 全局排除某些请求类型在配置文件中可以设置全局排除规则// config/responsecache.php exclude [ paths [ /admin/*, /api/*, ], methods [ POST, PUT, DELETE, ], ],四、常见问题与解决方案4.1 动态内容处理对于页面中包含部分动态内容的情况可以使用替换器Replacers功能。系统默认提供了CsrfTokenReplacer位于src/Replacers/CsrfTokenReplacer.php用于处理 CSRF 令牌的动态替换。4.2 缓存命中率监控可以通过监听缓存事件来监控缓存命中率// 在 EventServiceProvider 中 protected $listen [ Spatie\ResponseCache\Events\ResponseCacheHit [ App\Listeners\LogCacheHit, ], Spatie\ResponseCache\Events\CacheMissed [ App\Listeners\LogCacheMiss, ], ];4.3 缓存存储优化默认情况下响应缓存使用应用的默认缓存驱动。对于高流量应用建议使用 Redis 等高效缓存驱动以获得更好的性能。五、总结Laravel ResponseCache 提供的 CacheResponse 和 DoNotCacheResponse 中间件为 Laravel 应用性能优化提供了简单而强大的工具。通过合理配置缓存策略可以显著减轻服务器负载提高页面响应速度为用户提供更好的体验。无论是静态内容的长期缓存还是动态内容的灵活排除这两个中间件都能满足各种场景需求。结合缓存标签和事件监听还可以实现更精细的缓存管理和监控。掌握这些工具将帮助你构建更快、更高效的 Laravel 应用【免费下载链接】laravel-responsecacheSpeed up a Laravel app by caching the entire response项目地址: https://gitcode.com/gh_mirrors/la/laravel-responsecache创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

更多文章