You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Laravel中使用Cache::remember缓存分页查询结果?

解决Laravel查询缓存问题&寻找兼职开发者建议

一、给你的查询添加缓存

作为Laravel初学者,用Cache::remember给分页查询加缓存其实很简单,不过要注意分页参数会影响结果,所以缓存键得包含这些变量,避免不同页码的结果互相覆盖。

下面是修改后的完整代码,我会逐行解释:

// 获取当前请求的页码,默认是第一页
$page = request()->get('page', 1);

// 构建唯一缓存键:包含页码+每页条数,确保不同分页的缓存独立
$cacheKey = 'popular_images_page_' . $page . '_per_page_' . $settings->result_request;

// 用Cache::remember实现缓存,这里设置有效期为1小时(60*60秒,可按需调整)
$data = Cache::remember($cacheKey, 60 * 60, function () use ($query, $settings) {
    // 这里放你原来的查询逻辑
    return $query->groupBy('visits.images_id')
        ->orderByRaw('COUNT(visits.images_id) desc')
        ->select('images.*')
        ->paginate($settings->result_request)
        ->onEachSide(1);
});

return $data;

几个关键注意点:

  • 缓存键设计:必须把影响查询结果的变量(页码、每页条数)加入缓存键,否则不同页面的结果会被缓存成同一个值,导致错误。
  • 闭包的use关键字:因为闭包内部需要访问外部的$query和$settings变量,所以要用use把它们传进去,不然闭包找不到这些变量。
  • 缓存有效期:60*60代表缓存1小时,你可以根据数据更新频率调整——比如数据一天更新一次,就改成86400(24小时)。
  • 缓存更新:如果images或visits表的数据有变动,旧缓存就会过时。这时候可以在数据更新的代码里,用Cache::forget($cacheKey)清除对应页码的缓存;或者给缓存键加个版本号(比如$cacheKey = 'v1_popular_images_...'),数据更新时修改版本号,旧缓存就自动失效了。

二、寻找兼职Laravel开发者的建议

如果需要偶尔开发Laravel功能并付费,给你几个靠谱的方向:

  • 本地技术社区:找本地的PHP/Laravel交流群、线下开发者聚会,里面很多自由开发者或者小团队愿意承接零散需求,沟通也方便。
  • 熟人推荐:问身边做开发的朋友,推荐靠谱的兼职开发者,信任感更强,也能提前了解对方的技术水平。
  • 远程工作平台:选择专注于PHP/Laravel的开发者平台,查看开发者的过往作品和评价,确保交易有保障。

内容的提问来源于stack exchange,提问作者Salah Ait Mokhtar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.28 08:53:13