Yii框架如何清理缓存文件_Yii框架Runtime目录维护【运维】

夜萱姑娘_2202

夜萱姑娘_2202

2026-04-25

727人浏览

原创

推荐使用 ./yii cache/flush-all 清理缓存,它安全可控,触发各组件自身清理逻辑并兼容锁机制;手动删 @runtime 缓存文件易引发并发异常、锁损坏及文件残留。

yii框架如何清理缓存文件_yii框架runtime目录维护【运维】

直接删 @runtime 下的缓存文件不推荐——容易删错、漏删、破坏锁机制,甚至引发并发写入异常。 正确做法是走框架内置清理路径,或严格限定范围 + 确保进程无句柄占用。

用 cache/flush-all 命令清所有缓存组件

这是最安全、最可控的方式,会触发每个缓存组件自身的清理逻辑(比如 FileCache::gc()、RedisCache::flush()),同时兼容依赖项和锁机制。

  • 执行 ./yii cache/flush-all,它会列出所有注册的缓存组件并逐个清理
  • 若只想清某一个(如 fileCache),用 ./yii cache/flush fileCache
  • 该命令不会碰 logs/ 或 assets/,只处理明确声明为 cache 类型的组件
  • 注意:如果缓存组件配置了自定义 cachePath(如指向 /tmp/yii-cache),命令仍能正确识别并清理,前提是组件在 components 中注册且可访问

手动清理 FileCache 目录时必须调用 gc()

直接 rm -rf 缓存目录会导致未过期文件残留、锁文件损坏、甚至后续 get() 失败(因找不到对应 .lock 文件)。

Yii Framework 2.0.51
Yii Framework 2.0.51

Yii Framework 2.0.51 官方 Basic 应用模板,适合旧项目兼容、升级验证和开发测试。

下载
  • 正确做法是让 FileCache 实例自己清理:
    $cache = Yii::$app->cache; // 假设是 FileCache 实例
    $cache->gc(); // 强制执行垃圾回收:删过期文件 + 清理 lock 文件
  • 如果缓存实例没配在 components 里,得手动 new 并设好 cachePath,否则 gc() 不知道清哪
  • gc() 默认只清理「过期」文件;如要强制清空整个目录(慎用),得先 FileHelper::removeDirectory($cache->cachePath) 再 FileHelper::createDirectory($cache->cachePath)
  • 别在 Web 请求中频繁调用 gc(),它可能扫描大量文件,阻塞请求

删 @runtime/logs 后磁盘空间不释放?查 lsof | grep deleted

日志文件被删但空间没回来,99% 是 PHP 进程还拿着文件句柄——常见于常驻进程(queue worker、event-sourcing listener、xdebug 调试中的长脚本)。

  • 运行 lsof | grep deleted | grep php,看有没有类似 php 12345 user 10w REG 8,1 1073741824 123456 /path/to/runtime/logs/app.log (deleted) 的输出
  • 确认 PID 后,检查该进程用途:ps aux | grep 12345;如果是队列 worker,重启它:./yii queue/listen --stop && ./yii queue/listen
  • 临时缓解可用 logrotate 配合 copytruncate,但治标不治本;长期应确保日志写入器支持 reopen(如 Monolog 的 RotatingFileHandler)
  • 别依赖 touch runtime/logs/.keep 来“防止误删”——它对句柄占用毫无作用

别混用 TagDependency::invalidate() 和物理删除

用缓存标签(如用户资料相关缓存)时,清除动作必须走 TagDependency::invalidate(),而不是去删缓存文件或 Redis key。

  • 删文件只会让下次 get() 返回 null,但旧缓存内容还在磁盘上,且 TagDependency 标记键(如 yii:tag:user_profile)仍有效,导致新数据无法写入
  • 正确清除姿势:\yii\caching\TagDependency::invalidate(Yii::$app->cache, 'user_profile'),这会让所有绑定该 tag 的缓存项在下次 get() 时自动失效并重建
  • 如果缓存组件是 Redis,invalidate() 会删掉标记键;如果是文件缓存,它只删标记文件(.tag.user_profile),不碰数据文件本身
  • 多环境部署时,确保 cache 组件名、前缀(keyPrefix)一致,否则 invalidate() 在 dev 环境调用,prod 的标记键根本删不到

真正麻烦的从来不是“怎么删”,而是删完之后缓存组件是否还持有旧状态、依赖是否断裂、句柄是否残留——这些点不验证,清缓存就等于埋雷。

相关专题

更多
PHP Yii框架专题
PHP Yii框架专题

本专题专注于PHP主流框架Yii的应用,系统讲解MVC架构、路由机制、数据库操作、表单处理、安全验证与RESTful API 开发等核心内容。通过电商网站、后台管理系统与内容管理平台等实战项目,帮助学员快速掌握Yii框架的开发技巧与实战经验。

2025.09.04

2910

22

LLVM自定义Pass怎么写
LLVM自定义Pass怎么写

本专题聚焦LLVM自定义Pass开发,整理Pass类结构、run()方法、PreservedAnalyses、CMake构建、插件注册、-load-pass-plugin加载和测试用例编写流程。

2026.09.30

60

10

LLVM RISC-V参数配置教程
LLVM RISC-V参数配置教程

本专题介绍LLVM对RISC-V基础ISA和扩展的支持方式,涵盖RV32、RV64、标准扩展、实验性扩展、厂商扩展、-menable-experimental-extensions和版本差异。

2026.09.30

60

14

LLVM IR中间表示入门指南
LLVM IR中间表示入门指南

本专题整理LLVM IR的核心概念,包括中间表示作用、模块结构、函数、基本块、SSA形式、类型系统和常见语法,帮助新手理解LLVM编译流程中的关键层。

2026.09.30

40

12

PDF转图片方法
PDF转图片方法

需要把 PDF 页面用于上传、预览、分享或图片归档时,PDF 转图片方法专题整理 JPG/PNG 格式选择、逐页导出、清晰度设置、批量下载和结果检查等流程,帮助用户稳定完成 PDF 图片化处理。

2026.09.30

40

26

PixTV AI视频生成与无限画布创作
PixTV AI视频生成与无限画布创作

PixTV专题整理AI视频与视觉内容创作相关功能使用教程,涵盖AI生图、视频生成、无限画布、多模型创作、素材管理、声音音乐及视频剪辑等功能,帮助用户快速掌握PixTV从创意到成片的完整制作方法。

2026.09.29

40

15

Buffalo框架数据库开发全教程
Buffalo框架数据库开发全教程

本专题围绕Buffalo框架数据库开发,讲解database.yml多环境配置、soda与fizz迁移生成回滚、模型结构体标签、增删改查与条件查询、一对多与多对多关联、数据校验、回调钩子、事务处理及原生SQL执行能力。

2026.09.23

240

15

Buffalo框架路由与请求处理实操指南
Buffalo框架路由与请求处理实操指南

本专题讲解Buffalo框架路由与请求处理机制,涵盖路由注册与分组、资源路由、Handler编写规范、Context上下文方法、参数绑定、中间件编写挂载、Session与Cookie读写、Flash消息及错误页面定制方法。

2026.09.23

160

15

Buffalo框架零基础入门教程
Buffalo框架零基础入门教程

本专题整理Buffalo框架入门内容,涵盖Go环境准备、buffalo CLI安装、新项目生成、目录结构说明、dev热加载启动、数据库连接配置与常见报错排查,帮助新手按约定优于配置的思路跑通第一个Buffalo框架应用。

2026.09.23

120

15

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Yii2.0框架开发实战视频教程
Yii2.0框架开发实战视频教程

共22课时 | 9.3万人学习

Yii Framework 2.0 API 官方文档
Yii Framework 2.0 API 官方文档

共0课时 | 0人学习