必须先确认thinkphp的redis前缀和db号,再用scan+del按前缀安全清理;tp6+可执行php think clear --driver=redis,但仅清理默认redis store;自定义store需代码调用cache::store('name')->clear()。

确认 Redis 缓存前缀和实际 DB 配置
直接 FLUSHDB 或 FLUSHALL 极易误删其他业务数据,必须先查清 ThinkPHP 当前使用的 Redis 前缀和 DB 号。打开 config/cache.php,找到 stores['redis'] 配置块,重点关注:
– prefix 值(如 'think_cache:')
– database 值(默认常为 0,但可能被环境变量覆盖)
– 若使用了 .env,运行 php -r "var_dump($_ENV['CACHE_REDIS_DATABASE'] ?? null);" 验证真实 DB 号
用 redis-cli 按前缀安全批量删除
推荐在项目根目录执行以下命令,仅删匹配前缀的 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
TP6+ 命令行触发 Redis 清理(需配置正确)
php think clear --driver=redis 能生效的前提是:
– config/cache.php 中 default => 'redis'
– stores['redis'] 下的 prefix 和 database 已正确定义
– Redis 扩展已安装且可连通
否则该命令静默失败,不会报错也不会删任何东西
验证是否成功:清理后执行 redis-cli -a "your_password" DBSIZE,对比前后数值;或用 SCAN 0 MATCH "think_cache:*" 确认无残留
自定义 store 或多实例时不能靠 --driver=redis
如果你用了类似 Cache::store('my_redis') 这样的命名 store,--driver=redis 不会清理它——它只清理默认名为 redis 的 store。
此时必须代码级调用:
use think\facade\Cache;<br>Cache::store('my_redis')->clear();
注意:
– 该调用依赖容器初始化,建议在命令行类中执行,不要放在未加载框架的脚本里
– 若 store 配置了独立 prefix,clear() 会自动按该前缀删,无需手动拼接
Redis 缓存清理最易忽略的点:前缀不一致、DB 号错配、自定义 store 被遗漏。别信“一键全清”,每个前缀、每个 DB、每个 store 都得单独确认和处理。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











