跳转到主内容
websoft网络软件专家 - 深耕网络技术,打造实用软件!

ThinkPHP缓存机制怎么配置_ThinkPHP缓存配置指南【详解】

ThinkPHP缓存需正确配置驱动类型、连接参数和调用方式三层,任一错误都会导致Cache::get()静默返回null;file适合单机调试,redis适合多实例高频场景;务必检查目录权限、键名合法性及store配置一致性。 ThinkPHP 缓存不是“开个开关”就完事的,它分三层:驱动类型、连接参数、调用方式。配错任意一层,
Cache::get()
就会静默返回
null
,而你查数据库查得毫无察觉。 缓存驱动选
file
还是
redis
?看场景,别默认 开发环境或小流量后台,默认
file
没问题——不依赖外部服务,
runtime/cache/
目录写入即可。但上线后如果并发稍高,文件锁争用会导致请求排队,响应明显变慢。
file
适合:单机部署、调试验证、低频读取配置类数据(如系统参数)
redis
适合:多实例部署、高频热点数据(用户会话、商品列表)、需要原子操作(
inc()
/
dec()
) 别在
config/cache.php
里写死
'type' => 'redis'
却没装扩展——PHP 会报
Class 'Redis' not found
,且不会提示缓存失效,只会退化成空逻辑
cache.php
配置项哪些必须填?哪些能省? ThinkPHP 6+ 的缓存配置集中在
config/cache.php
,关键字段不是越多越好,而是按需填准:
'default'
必须明确指定驱动名,比如
'redis'
,否则即使
'stores'['redis']
写全了也用不上
'host'
和
'port'
在
redis
驱动下必须可连通;本地测试常填
'127.0.0.1'
,但 Docker 环境得换
'host.docker.internal'
或宿主机 IP
'prefix'
建议设非空值(如
'tp6_'
),避免多个项目共用 Redis 时键名冲突
'expire'
设为
0
表示永不过期,但 Redis 内存有限,慎用;设为负数(如
-1
)在部分旧版 TP 中会被忽略,建议统一用正整数秒 为什么
Cache::get()
总是返回
null
?先查这三处 这不是代码写错了,大概率是缓存根本没写进去,或写进去了却读不到——常见于路径、权限、作用域错位: 立即学习 “ PHP免费学习笔记(深入) ”; 检查
runtime/cache/
目录是否存在且 PHP 进程有写权限;若改过
'path'
,确认路径是**绝对路径**或相对于项目根目录的正确相对路径(如
'../data/cache/'
) 确认没在控制器里用
S('key', $val)
(TP5 早期函数),而在 TP6+ 中混用——
S()
已废弃,只认
Cache::set()
TP6 支持多 store,如果你用了
Cache::store('redis')->get('key')
,但配置里没定义
'redis'
store 或拼错名字,就会 fallback 到默认驱动(可能是 file),导致跨 store 读不到 最易被忽略的一点:缓存键名本身带特殊字符(如空格、斜杠、中文)在
file
驱动下会生成非法文件名,写入失败却无报错;用
md5($key)
或规范命名(只含字母、数字、下划线)是简单有效的兜底方案。

相关文章