thinkphp 6 redis 缓存需手动配置:安装 phpredis 扩展,设 cache.default 为 'redis',正确填写 stores.redis 的 host、port、password、database(数字非字符串);关闭 key 前缀用 'prefix' => '';缓存时间传 null 表示永不过期,0 表示立即删除;开启 'persistent' => true 启用持久连接防高并发连接耗尽。

ThinkPHP 6 的 Redis 缓存驱动怎么配
直接能用,但默认不启用 Redis,得手动改配置、装扩展、确认服务连得上。
常见错误现象:CacheException: Cache handler not exists: redis 或 Connection refused —— 说明驱动没注册,或 Redis 服务根本没跑起来。
- 确保已安装
phpredis扩展(非predis),运行php -m | grep redis能看到redis - 修改
config/cache.php中的default为'redis',并确认stores.redis配置块存在且字段完整 -
host、port、password(如有)、database必须和你的 Redis 实例一致;database默认是0,别写成字符串"0",否则会静默失败 - 如果用的是 Docker 或远程 Redis,检查防火墙、bind 地址(
redis.conf中bind是否包含127.0.0.1或对应网段)
Redis 缓存键名被自动加前缀,怎么关或自定义
ThinkPHP 6 默认给所有缓存 key 加 think: 前缀,不是 bug,是设计,但会影响和其他系统共享缓存的场景。
使用场景:需要和 Node.js 或 Python 服务共用同一个 Redis 库,或者调试时想用 redis-cli keys "*" 直接看到原始 key。
- 在
config/cache.php的stores.redis下加'prefix' => ''可彻底关闭前缀 - 设为
'prefix' => 'myapp:'就能换前缀,注意结尾带冒号更规范 - 该配置只影响通过
cache()函数或Cache::get()等调用的缓存,不影响手动用Redis::set()写入的 key - 前缀为空时,若 key 含空格或特殊字符(如
user:123:name),Redis 本身支持,但 ThinkPHP 不校验,出问题得自己兜底
缓存失效时间设成 0 不代表永不过期
传 0 给 cache($key, $value, 0),实际效果是「立刻过期」,不是永久保留。
原因:ThinkPHP 底层把 0 当作「立即删除」处理,真正永不过期得用 null 或省略第三个参数(取决于驱动实现)。
- 正确写法:
cache('token', $val, null)或cache('token', $val, 3600) -
cache('token', $val, 0)等价于cache('token', null),会清掉这个 key - Redis 本身支持
SET key val EX 0吗?不支持 ——EX参数必须是正整数,所以 TP 这里做了语义转换 - 如果业务真需要长期缓存(比如配置项),建议设个大值如
31536000(1 年),比依赖null更可控
Redis 连接池没开,高并发下容易打满连接
ThinkPHP 6 默认每次缓存操作都新建/复用一个 Redis 连接,没做连接池管理。QPS 上去后,Too many open files 或 Connection reset by peer 就来了。
这不是 TP 的缺陷,而是它把连接管理交给了底层扩展 —— phpredis 支持持久化连接,但得显式开启。
- 在
config/cache.php的stores.redis中加'persistent' => true - 同时确保
redis.conf中maxclients足够(默认 10000,一般够用),并检查ulimit -n是否限制过严 -
persistent开启后,连接由 PHP-FPM 进程池维持,重启 FPM 才释放,适合长生命周期请求(如 Swoole 模式需额外处理) - 别跟
pool混淆:TP 没内置连接池组件,所谓“池”其实是 phpredis 的持久连接机制,不是 Go 那种可配置大小的池
Redis 配置看着简单,但 prefix、ttl 语义、连接复用这三处,线上最容易悄悄出问题。尤其是从 file 缓存切过来时,0 和 null 的行为差异,半夜查日志会多绕两轮。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!










