如何在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
相关产品推荐
相关产品推荐

