yii2.0和yii1.1.32部署后缓存不生效的常见原因及刷新方案:yii2需确认并刷新schema缓存(如$app->db->schema->refresh()或命令行php yii cache/flush-schema),避免模型未知属性错误;yii1需手动清空cfilecache目录或truncate cdbcache表;均须先验证缓存组件配置是否正确启用。

Yii2.0和Yii1.1.32项目部署后缓存不生效,常见原因是旧缓存残留、Schema缓存未更新、或缓存组件配置未生效,需按框架版本分路径强制刷新。
Yii2.0项目:刷新数据库表结构缓存(Schema Cache)
部署后新增字段或修改表结构,但模型仍报“未知属性”,说明Schema缓存未刷新——这是最常被忽略的环节。
第一步:确认已开启Schema缓存。检查 config/db.php 或主配置中是否含 'enableSchemaCache' => true;若未启用,缓存本身就不工作,无需刷新。
第二步:执行精准刷新。在控制器动作中临时插入以下代码并访问该路由:
Yii::$app->db->schema->refresh();
这仅刷新当前连接的全部表结构元数据,不影响其他缓存项,比全局 flush 更安全。
第三步:若需刷新单张表(如只改了 user 表),用:Yii::$app->db->schema->refreshTableSchema('user');
【注意】不要在生产环境长期保留 Yii::$app->cache->flush(),它会清空所有缓存(包括页面、查询、配置),导致瞬时高负载。
Yii2.0项目:命令行刷新Schema缓存(推荐长期方案)
适用于部署后批量验证或CI/CD流程,避免在代码里硬编码刷新逻辑。
运行以下命令(确保 yii 控制台应用已正确加载数据库和缓存组件):
php yii cache/flush-schema
该命令只清除 DB Schema 缓存,不影响 Redis 中的业务数据缓存或页面缓存。
若项目使用多个数据库连接(如 db_admin 和 db_main),需指定连接名:
php yii cache/flush-schema --connection=db_admin
Yii1.1.32项目:手动清除CFileCache或CDbCache文件/记录
Yii1默认使用 CFileCache,缓存文件散落在 runtime/cache/ 目录下,部署后常因权限或路径变更导致读取失败。
方法一:清空文件缓存目录
直接删除 protected/runtime/cache/ 下全部子目录和文件(保留 cache 目录本身)。
方法二:若使用 CDbCache,执行 SQL 清空缓存表:
TRUNCATE TABLE `cache`;(假设表名为 cache,实际以配置中 cacheTableName 为准)
【关键前提】Yii1 的 CDbCache 表必须有写权限,且表结构包含 id、expire、value 三字段,否则 truncate 后无法写入新缓存。
通用排查:确认缓存组件是否真正启用
无论 Yii1 还是 Yii2,缓存不生效的根源常在配置层。
Yii2 检查 components['cache'] 是否定义,且类名正确(如 yii\caching\FileCache 或 yii\redis\Cache);若配置中写了 'class' => 'yii\caching\DummyCache',那缓存就是故意关闭的。
Yii1 检查 components['cache'] 是否存在,且 class 值为 CFileCache 等有效类;常见错误是漏写引号:'class'=>CFileCache(缺少引号)会导致 PHP 解析失败,静默降级为 DummyCache。
部署后首次访问任意页面,查看 runtime/logs/app.log,搜索 “cache” 或 “Unable to open stream”,可快速定位缓存初始化失败原因。











