laravel 9 数据库缓存生效需三步验证:一确认配置为 database 驱动,二确保 cache 表存在且字段匹配,三用 cache::put/get 和 db 查询实测写入与读取。

直接验证 Laravel 9 数据库缓存是否生效,关键不是“猜”,而是分层确认:先看配置是否真走 database 驱动,再看缓存表是否被写入,最后用代码实测读写行为。下面几步做完,结果一目了然。
确认当前默认缓存驱动是 database
打开 config/cache.php,检查 'default' => env('CACHE_DRIVER', 'file') 这一行。如果 .env 中没设或设成了 redis/file,它就不会走数据库缓存。必须确保:
- .env 文件里有 CACHE_DRIVER=database
- 运行过 php artisan config:clear(清除旧缓存)
- 重启 CLI 或 Web 服务(避免配置被内存缓存)
- 在 tinker 中执行 dd(config('cache.default')),输出必须是 "database"
检查 cache 表是否存在且可写
database 缓存依赖一张名为 cache 的数据表。Laravel 不会自动建它,必须手动创建:
- 运行 php artisan migrate:install(确保 migrations 表存在)
- 执行迁移命令或手动建表:
Schema::create('cache', function ($table) {<br> $table->string('key')->unique();<br> $table->text('value');<br> $table->integer('expiration');<br> }); - 用数据库工具(如 phpMyAdmin、TablePlus)打开该表,确认为空或有历史记录
用 Cache::put + Cache::get 实时验证
进 tinker,执行以下三步,观察是否真正落库:
- Cache::put('test_key', 'hello_db', 60); —— 写入 60 秒缓存
- 立刻查表:DB::table('cache')->where('key', 'test_key')->first(); —— 应返回一条记录,
expiration是未来时间戳(秒级) -
Cache::get('test_key'); —— 应返回
"hello_db";删掉表中这条记录后再执行,应返回null
排除常见干扰项
如果上面步骤失败,优先排查这些硬性条件:
- 缓存表名必须严格为 cache(不能是 cache_items、laravel_cache 等)
- 表字段名和类型必须完全匹配:
key(string)、value(text)、expiration(integer) - 不要混用
Cache::remember()测试——它内部可能因键名或闭包问题跳过写入,先用最基础的 put/get - 确保没有其他缓存驱动(如 redis)在 config/cache.php 的
stores.database配置里意外覆盖了连接











