数据库缓存是Laravel缓存系统的后端存储驱动(如CACHE_DRIVER=database),将键值对存入cache表;模型缓存是业务层策略,用Cache门面缓存Eloquent查询结果,依赖驱动但逻辑独立。

Laravel 11 中“数据库缓存”和“模型缓存”不是同一类概念,名称容易混淆,但本质完全不同:前者是 Laravel 缓存系统的一种 后端存储方式(即把缓存数据存在哪),后者是 一种业务层缓存策略(即对 Eloquent 模型查询结果做缓存)。搞清这个区别,能避免配置错驱动、写错逻辑、查不到 key 等典型问题。
数据库缓存:指用数据库表存缓存数据
这是 Laravel cache 配置中的一种 驱动类型(driver),对应 CACHE_DRIVER=database。它不操作你的业务表,而是把缓存键值对写入你专门建的 cache 表里:
- 需手动运行迁移创建表:
php artisan cache:table && php artisan migrate - 表结构含
key(唯一)、value(序列化数据)、expiration(时间戳)三字段 - 适合开发环境或极小项目——性能低、不支持标签(tags)、无原子操作,高并发下易成瓶颈
- 和 Redis/Memcached 一样,只是换了个“硬盘当内存用”,跟你的 User、Post 模型本身无关
模型缓存:指对 Eloquent 查询结果做缓存
这是开发者在业务代码中主动实施的 数据访问优化手段,核心目标是减少重复 SQL 执行。它不依赖某种驱动,而是利用 Laravel 的 Cache 门面(无论底层是 Redis 还是 database)来封装模型查询:
- 典型写法:
Cache::remember('user_123', 3600, fn() => User::find(123)) - 关键不在“用什么存”,而在“存什么”——存的是
Model实例或集合,不是原始 SQL 或连接句柄 - 必须配合缓存失效机制:模型更新时调用
Cache::forget('user_123')或用Cache::tags(['user'])批量清理 - 若底层驱动是
database,那模型缓存的数据就真会落到cache表里;换成redis,就进 Redis —— 驱动可随时切换,逻辑不变
为什么常被混为一谈?
因为新手容易从字面理解:“数据库缓存”听起来像“给数据库加缓存”,于是以为它是给 Model 查询提速的方案。实际上:
- 数据库缓存(database driver) 是 Laravel 缓存系统的 落盘方式之一,性能弱,不推荐用于生产模型缓存
- 模型缓存(model caching) 是一种通用模式,强烈建议搭配 Redis 驱动使用,才能发挥毫秒级响应优势
- 两者可共存:你完全可以用 Redis 做模型缓存,同时用 database 驱动存些低频配置项——只要
CACHE_DRIVER设为redis,并为不同用途显式指定 store 即可


















