thinkphp6缓存配置需分层设置:数据库字段缓存(schema_cache_type)必须写入config/database.php的连接配置中,且需执行php think optimize:schema生成缓存;redis前缀等参数须在config/cache.php的stores.redis下配置或通过.env注入;模型级缓存开关及ttl需在模型类中定义$ options属性,否则全局配置无效。

ThinkPHP6隐藏的缓存配置项不是写在config/cache.php里就能全部生效的,有些必须嵌套在数据库连接、模型定义或环境变量中才起作用,漏掉任一位置会导致缓存不触发或失效。
数据库字段结构缓存(schema_cache_type)
这个配置项根本不在cache.php里,它属于数据库连接层专属参数,必须写进config/database.php的对应连接配置内部。
打开config/database.php,找到你的数据库连接配置块,例如'mysql' → 在该数组内添加schema_cache_type和schema_cache_path两项:
【schema_cache_type必须设为file或redis,不能留空或写错大小写】
示例(MySQL连接内新增):
'mysql' => [
'type' => 'mysql',
'hostname' => env('DB_HOST', '127.0.0.1'),
// ...其他连接参数
'schema_cache_type' => 'file',
'schema_cache_path' => runtime_path('schema'),
],
注意:runtime_path('schema')目录必须存在且PHP进程有写权限,否则缓存文件生成失败但无报错。
配置完后,需手动执行php think optimize:schema命令触发首次缓存生成,否则字段缓存永不激活。
缓存前缀与序列化方式(Redis专用)
这些参数藏在cache.php的stores.redis配置块里,不是default层级,改错位置等于白改。
方法一:直接在config/cache.php中修改redis store的底层参数
定位到'stores' → 'redis' → 在该子数组中加入或修改:
'prefix' => 'tp6_v2:', // 所有key自动加此前缀,避免多项目冲突
'serialize' => true, // false时Redis原生存储,true时用PHP serialize封装
'select' => 2, // 指定Redis数据库编号,默认是0
方法二:通过.env环境变量注入(推荐用于多环境部署)
在项目根目录.env文件中添加:
CACHE_REDIS_PREFIX=prod_
CACHE_REDIS_SERIALIZE=true
CACHE_REDIS_SELECT=3
框架会自动映射到stores.redis对应键,无需改PHP配置文件。
模型级缓存开关与默认TTL
每个模型类可独立控制是否启用查询缓存,并覆盖全局TTL,这是config/cache.php完全无法触达的隐藏层。
第一步:在模型类顶部use think\model\Pivot;下方添加静态属性
protected $options = [
'cache' => true,
'cache_time' => 1800,
];
第二步:若要禁用某模型的缓存,直接设'cache' => false,哪怕全局cache.php开着也无效
第三步:cache_time单位为秒,设为0表示永不过期(Redis中为PERSIST),设为null则回退到驱动默认expire值
这一步操作起来很简单,直接把属性加进模型类就行,但漏掉会导致该模型所有select()都不走缓存,即使你在链式调用里写了→cache()也无效。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











