thinkphp缓存怎么配置_cache类支持redis与file驱动【说明】

ThinkPHP 6 的 Cache 类默认只支持 file 和 array 驱动,Redis 不是开箱即用的——必须手动装扩展、配 store、切 default,三者缺一不可,否则所有 Cache::get() 都会静默走 file 驱动,返回 null 也不报错。

为什么 Cache::get() 总是返回 null

这不是 Redis 连不上,而是缓存驱动根本没切过去。TP6 的 Cache 门面不自动加载 Redis,它只代理已注册的驱动。

default 必须设为 ‘redis’(全小写),写成 ‘Redis’ 或 ‘REDIS’ 会 fallback 到 filestores.redis 配置块必须存在,且 host、port、select(不是 database)、password 全部显式填写;select 必须是整数,"0" 会静默失败password 即使为空也得写 ”,留空或删掉字段会导致连接被拒绝快速验证:运行 php -r "var_dump(cache(‘test’, ‘ok’, 10));" 再 php -r "var_dump(cache(‘test’));",两次都输出 "ok" 才算通

Redis 驱动必须装 topthink/think-redis,不是 phpredis 扩展

只启用 PHP 的 redis 扩展,或只装 predis/predis,Cache::store(‘redis’) 仍会抛 Driver [redis] not supported。

执行 composer require topthink/think-redis(注意不是 phpredis 或 predis)确认 php -m | grep redis 有输出(PHP redis 扩展必须启用)config/cache.php 中 stores.redis.type 必须为 ‘redis’(小写),不是 ‘Redis’,也不是类名别在配置里写 new \Redis() 或 new Predis\Client()——驱动由容器管理,手动 new 会导致连接风暴

key 前缀和过期时间的坑比想象中多

你用 Cache::get(‘user_123’) 查不到值?大概率是因为实际存的是 think:user_123,而且 expire=0 并不等于“永不过期”。

立即学习“PHP免费学习笔记(深入)”;

默认前缀是 think:,CLI 查键得用 redis-cli keys "think:user_*",生产环境禁用 keys想换前缀:在 stores.redis 下加 ‘prefix’ => ‘shop:’;关前缀用 ‘prefix’ => ”(不推荐,多项目共用 Redis 易冲突)cache(‘key’, $val, 0) 是立即删除,等价于 cache(‘key’, null);真正永不过期得传 nullexpire 设为负数(如 -1)在旧版 TP 中会被忽略,统一用正整数秒(如 3600)最稳

Redis 配置不是填完就完事——select 值、host 地址、前缀、扩展依赖、大小写,五处任一出错都会让缓存退化成空逻辑。调试时别只盯 Redis 是否启动,先确认 Cache::get() 走的是哪个驱动。

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。