laravel 10中redis缓存是数据库查询结果的暂存层,非替代数据库;需配置cache_driver=redis、正确设置database.php中redis连接参数、用cache::remember自动读写、配合模型事件主动失效缓存,并按数据敏感度分级设置ttl(如用户资料20分钟、商品库存5分钟、静态配置6小时)。

在 Laravel 10 中,用 Redis 实现数据库缓存不是“替代数据库”,而是把高频、低频变动的查询结果暂存到 Redis 中,下次请求直接读缓存,跳过数据库查询。核心在于:选对驱动、设好 TTL、写对逻辑。
配置 Redis 为默认缓存驱动
确保 Laravel 使用 Redis 而非默认的 file 驱动:
- 在 .env 中设置:CACHE_DRIVER=redis
- 检查 config/database.php 的
redis配置块,确认 host、port、password、database 正确(如'database' => 1可专用于缓存,避免与 session 冲突) - 运行 php artisan config:clear 和 php artisan cache:clear 生效新配置
用 Cache::remember 缓存数据库查询结果
这是最常用也最安全的方式——只在缓存失效时才查库,自动写回:
-
基础用法(秒数):
Cache::remember('users:active', 300, fn() => User::where('active', 1)->get());—— 缓存 5 分钟 -
带 Carbon 时间对象(更清晰):
Cache::remember('post:123', now()->addMinutes(15), fn() => Post::find(123)); - 键名建议含业务语义(如
post:123),避免泛用all_posts这类易冲突、难刷新的键
配合模型事件自动清理缓存
数据更新后,旧缓存必须失效,否则出现陈旧数据。推荐监听模型事件手动清除:
- 在
App\Models\Post的booted()方法中添加: static::updated(fn($post) => Cache::forget("post:{$post->id}"));static::deleted(fn($post) => Cache::forget("post:{$post->id}"));- 批量操作(如
updateMany)不触发模型事件,此时需在业务层显式Cache::flush()或按范围删除(如Cache::tags(['posts'])->flush(),需启用 Redis 标签支持)
注意 TTL 设置的合理性
TTL 不是越长越好,要按数据敏感度分级:
-
用户资料类:10–30 分钟(
now()->addMinutes(20)) - 商品价格/库存:1–5 分钟(强一致性要求)
-
站点配置、地区列表等静态数据:1–24 小时(可设
3600或now()->addHours(6)) - 避免设
0或null(部分驱动解释为永不过期),生产环境慎用











