必须先确认ThinkPHP的Redis前缀和DB号,再用scan+DEL按前缀安全清理;TP6+可执行php think clear --driver=redis仅清默认store,自定义store需调用Cache::store('name')->clear()。

确认 Redis 的 prefix 和 database 配置
直接执行 FLUSHDB 或 FLUSHALL 极易误删其他业务数据,必须先查清 ThinkPHP 当前实际使用的 Redis 前缀和 DB 号。打开 config/cache.php,定位 stores['redis'] 块,重点看:
– prefix 值(如 'think_cache:')
– database 值(默认常为 0,但可能被 .env 覆盖)
若用了 .env,运行 php -r "var_dump($_ENV['CACHE_REDIS_DATABASE'] ?? null);" 验证真实 DB 号
用 redis-cli 按 prefix 安全批量删除
推荐在项目根目录执行以下命令,仅删匹配前缀的 key,不碰其他业务缓存:redis-cli -a "your_password" --raw scan 0 MATCH "think_cache:*" COUNT 1000 | xargs -r redis-cli -a "your_password" DEL
说明:
– -a 后填实际密码;若无密码则去掉该参数
– scan 比 KEYS 更安全,避免阻塞 Redis
– COUNT 1000 控制单次扫描量,防内存溢出
– xargs -r 确保无匹配时不报错执行 DEL
如果还用了标签缓存(如前缀是 tp_tag:),需额外跑一次:redis-cli -a "your_password" --raw scan 0 MATCH "tp_tag:*" COUNT 1000 | xargs -r redis-cli -a "your_password" DEL
TP8 命令行清理只对默认 store 有效
php think clear --driver=redis 能生效的前提是:
– config/cache.php 中 default => 'redis'
– stores['redis'] 下的 prefix 和 database 已正确定义
– Redis 扩展已安装且可连通
否则该命令静默失败,不会报错也不会删任何东西
如果你用了自定义 store(比如 Cache::store('my_redis')),这个命令完全不生效——它只清理名为 redis 的默认 store
此时必须代码级调用:use think\facade\Cache; Cache::store('my_redis')->clear();
别漏掉标签缓存和模型查询缓存
php think clear --all 只清驱动级缓存(如文件缓存目录、Redis 中带 prefix 的 key),但以下几类完全不碰:
– 模型层的查询缓存(如 UserModel::where()->cache(true)->select() 生成的 key)
– 模板编译缓存(路径在 runtime/view/,必须加 -t 参数)
– 字段结构缓存(存于 runtime/schema/ 或 runtime/temp/,需手动调 \think\facade\Db::clearCache())
– 标签缓存(Cache::tag('user')->clear() 是否生效,取决于驱动是否真正支持:只有 file、redis、memcached 实现了完整穿透;Redis 下还必须配置 tag_prefix => 'tp_tag:',否则索引 key 和数据 key 对不上)
立即学习“PHP免费学习笔记(深入)”;



















