ThinkPHP缓存驱动前缀设置不当会导致Redis中key不匹配、redis-cli查不到数据、多项目键名覆盖及Cache::get()始终返回null;默认前缀为“think:”,需用redis-cli get "think:user_123"或keys "think:user"查询;解决方法有二:一是设prefix=>''禁用前缀,二是设不同自定义前缀如'admin_v3:'隔离;禁用前缀时须确保字段存在且为空字符串、清空旧缓存、运行php think clear:cache。

ThinkPHP缓存驱动前缀设置不当会导致Redis中实际存储的key与你预期查询的key完全不匹配,用redis-cli手动查不到数据、多项目共用Redis时键名互相覆盖、调试时Cache::get()始终返回null却查不出原因。
前缀导致redis-cli查不到缓存
ThinkPHP默认为所有缓存key添加【think:】前缀,比如你调用Cache::set('user_123', $data),Redis里真正存的是think:user_123。
直接在终端执行redis-cli get user_123会返回(nil),因为key不存在——你得写redis-cli get "think:user_123"才能命中。
更麻烦的是模糊查询:redis-cli keys "*user*"查不到任何结果,必须写redis-cli keys "think:*user*"才有效。
立即学习“PHP免费学习笔记(深入)”;
多个ThinkPHP项目共用Redis时键冲突
方法一:关闭前缀
在config/cache.php的stores.redis配置块中加入'prefix' => '',即可彻底禁用前缀。
方法二:自定义隔离前缀
设为'prefix' => 'admin_v3:'或'prefix' => 'api_shop:',不同项目用不同前缀,避免键名覆盖。
【务必确保所有项目前缀互不相同,否则仍会覆盖】
前缀为空字符串时的特殊行为
第一步:确认prefix字段存在且值为''(空字符串),不能省略该字段,也不能设为null或false。
第二步:清空当前Redis DB中残留的带前缀缓存,否则新写入的无前缀key和旧的think:* key混存,造成数据错乱。
第三步:执行php think clear:cache命令清理框架侧缓存索引,避免file驱动残留影响判断。



















