Laravel 8 中数据库缓存首选 Cache::remember() 或 Eloquent 的 remember() 方法,支持自动键生成、Redis 驱动及 TTL 管理,需按数据敏感度设置过期策略并切换高性能缓存驱动。

直接用 Cache::remember() 或 Eloquent 的 remember() 方法,就能把数据库查询结果缓存起来,后续请求直接读缓存,跳过数据库——这是 Laravel 8 做数据库缓存最常用、最有效的起点。
用 remember() 缓存 Eloquent 查询
在模型查询链中插入 remember(秒数),它会自动生成缓存键、写入配置的缓存驱动(如 Redis),并在过期前自动返回缓存值:
-
User::where('status', 1)->remember(3600)->get();—— 缓存 1 小时 -
Post::with('author')->remember(7200)->paginate(15);—— 关联查询+分页也支持,但remember()必须放在get()、first()或paginate()之前 - 需要自定义键名避免冲突?传第二个参数:
User::where('dept_id', $id)->remember(1800, 'users_dept_'.$id)->get();
用 Cache::remember() 封装原生或复杂查询
当查询不是 Eloquent 风格(比如 DB::table、聚合、多表 JOIN),就用门面手动控制:
use Illuminate\Support\Facades\Cache;$stats = Cache::remember('daily_active_users_20261021', 3600, function () { return DB::table('users')->whereDate('last_login_at', today())->count(); });- 键名建议带业务标识和时间粒度,方便后期按前缀批量清理,例如
stats:orders:monthly
缓存键设计与生命周期管理
缓存不是设了就完事,得配合数据特性设置合理 TTL,并在数据变更时主动失效:
- 静态配置类(如站点开关、地区列表):TTL 可设长些,比如 7200 秒(2 小时),略大于业务可接受陈旧窗口
- 实时敏感类(如余额、订单状态):禁用
remember(),改用「双删策略」——更新前删缓存、更新后删缓存,再加数据库行锁防并发 - 高频变更但查询耗时类(如统计报表):TTL 不低于 300 秒,防止缓存击穿引发雪崩
- 清理单个缓存:
Cache::forget('users_dept_5');清整个业务域:Cache::tags(['users'])->flush()(需驱动支持标签,Redis 默认支持)
驱动切换是性能提升的前提
默认 file 驱动在高并发下易受文件锁和磁盘 I/O 拖累。想真正减负数据库,必须切到 Redis 或 Memcached:
- 改
.env:CACHE_DRIVER=redis,然后运行php artisan config:clear - 确认 Redis 连接正常:
php artisan tinker→Cache::store('redis')->put('test', 'ok', 10)返回true - 别忘了配
prefix防多租户键冲突,比如CACHE_PREFIX=prod:tenant_a:


















