redis缓存需手动配置驱动、扩展和字段,否则cache::get()返回null;必须满足phpredis扩展启用、config/cache.php中redis配置完整、安装think-cache扩展并注册;cache第三个参数为0会立即删除而非永不过期。

Redis 缓存在 ThinkPHP 里不是开箱即用的,必须手动配驱动、装扩展、对齐配置字段,否则 Cache::get() 永远返回 null —— 因为它还在用默认的 file 驱动,你根本没切过去。
cache.php 里 default 设成 'redis' 还是不生效?检查这三处硬性条件
ThinkPHP 不会自动启用 Redis,哪怕你写了 'default' => 'redis',只要下面任意一项不满足,Cache::get() 就静默退化到 file 驱动:
-
php -m | grep redis必须输出redis—— 用的是phpredis扩展(非predis),Windows 下注意php_redis.dll已加载 -
config/cache.php中'stores.redis'配置块必须存在,且含完整字段:host、port、password(空字符串也要写'')、select(整数,不能是"0") - TP6 要求显式安装缓存扩展:
composer require topthink/think-cache,并在app/provider.php中注册think\provider\CacheProvider::class
cache('key', $val, 0) 为什么 key 立刻消失?别传 0,改用 null 或省略
传 0 给第三个参数,不是“永不过期”,而是“立刻删除”——底层直接调 $this->handler->set($key, null)。这是 ThinkPHP 的语义约定,和 Redis 原生命令无关。
Redis 缓存和数据结构管理技能。通过自然语言操作 Redis,支持 String、Hash、List、Set、ZSet、Stream 等数据结构操作。当用户提到 Redis、缓存、消息队列、会话存储时使用此技能。
-
cache('token', $val, 0)→ 等价于cache('token', null),写入即删 -
cache('token', $val, null)→ Redis 不设 TTL,靠内存淘汰或手动清理 -
cache('token', $val)→ 使用配置中stores.redis.expire的默认值(如3600) - 生产环境慎用
null:Redis 无真正永久 key,建议设大值如31536000(1 年)更可控
Redis CLI 查不到 key?先确认 prefix 和 database 是否匹配
ThinkPHP 默认给所有缓存 key 加 think: 前缀,且 select(不是 database)必须与 Redis 实例实际库号一致。你在 CLI 里 GET user:1001 返回 nil,大概率是因为:
- 实际存的是
think:user:1001(前缀未关) - TP 配了
'select' => 1,但你redis-cli -p 6379连的是 db 0 - 用了 Docker 或远程 Redis,
redis.conf中bind未放开对应 IP,或防火墙拦了端口 - 调试时可用
keys think:user*(仅开发环境),生产禁用;更安全的是临时加日志:var_dump($this->getRealKey('user:1001'))
想用 JSON 序列化代替 serialize()?别改 core,继承驱动重写方法
默认 serialize() 生成二进制内容,跨语言不可读、有反序列化风险、PHP 升级后可能失效。除非你真要缓存带方法的对象实例(比如查询构建器),否则应切到 json_encode()。
- 新建类
app\cache\driver\JsonRedis,继承think\cache\driver\Redis - 重写
serialize()和unserialize()方法,分别调用json_encode()和json_decode() - 在
config/cache.php中把stores.redis.type改成你的类全名,或新增一个json_redisstore 类型 - 注意:JSON 无法保留对象方法、资源句柄(如
fopen())、\DateTime对象会变空数组 —— 缓存前需手动toArray()
最常被忽略的一点:TP6 的 Cache 门面和驱动彻底解耦,cache() 函数式调用在 TP6 中已废弃;所有缓存操作必须走 Cache::get() 或 Cache::store('redis')->get(),否则配置再对也白搭。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!










