thinkphp 3.2无全局数据库缓存开关,需分别关闭字段缓存(设db_fields_cache=>false)和查询缓存(移除cache()调用、清s缓存或设data_cache_type=>'null')。

ThinkPHP 3.2 中没有独立的“数据库缓存”开关,但存在两类与数据库操作密切相关的缓存机制:一是字段缓存(表结构元信息缓存),二是查询缓存(通过 S() 或模型 cache() 方法实现)。关闭它们需分别处理,不能只改一个配置就全部禁用。
关闭字段缓存(即模型字段自动缓存)
字段缓存用于加速模型对数据表字段的读取(如自动获取字段名、类型),默认开启。它在 Runtime/Cache/ 下生成字段定义文件,影响开发调试和部署一致性。
- 在项目配置文件(如
Application/Common/Conf/config.php)中添加:'DB_FIELDS_CACHE' => false, - 或直接在入口文件
index.php的配置前临时关闭:define('DB_FIELDS_CACHE', false); - 注意:该配置仅对使用
M()或继承Model的类生效;若使用Db类直连数据库,则不受影响。
关闭查询缓存(即 SQL 查询结果缓存)
查询缓存由开发者主动调用触发,不是全局自动启用的。只要你不显式使用 cache() 或 S() 存储查询结果,就不会产生查询缓存。
- 检查所有模型调用,移除类似这样的代码:
$list = M('User')->cache(true)->select();$list = M('User')->cache('user_list', 3600)->select(); - 清理已存在的查询缓存文件:删除
Runtime/Cache/目录下所有子文件(保留目录结构),或执行:S('', '', 'clear');(清空全部 S 缓存) - 如需彻底禁用 S 缓存功能,可将缓存类型设为
Null:'DATA_CACHE_TYPE' => 'Null',(此配置会让所有S()调用失效)
额外建议:避免误启缓存的常见情况
有些配置或行为会间接导致缓存被写入,需一并确认:
- 确保未开启 HTML 静态缓存(
'HTML_CACHE_ON'=>true),否则页面中嵌套的查询可能被整体固化 - 检查是否误用了
F()函数持久化了查询结果(F('query_result', $data)),它不走缓存系统但效果类似 - 若使用了自定义的缓存封装类(如知识库中提到的
utility::clearCache()),确认其逻辑未在后台自动调用cache()
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











