CodeIgniter缓存更新需按类型精准清除:页面输出缓存用delete_cache()或清空application/cache/;数据库缓存需手动调用cache_delete()或cache_delete_all();驱动缓存须用对应driver的clean()或delete();开发环境建议关闭或设短过期时间。

要让 CodeIgniter 的缓存更新生效,关键不是“清理得越狠越好”,而是**按缓存类型精准清除、配合代码变更同步操作**。不同缓存机制(页面输出缓存、数据库查询缓存、驱动缓存)的清理方式和时机完全不同,混用或遗漏某一种,都会导致新代码不生效、旧数据还在显示。
页面输出缓存(output cache)必须手动删或调用删除
这是最常见的卡顿原因:你改了视图或控制器逻辑,但浏览器还是返回旧 HTML。因为 CI 把渲染结果直接写成文件存进 application/cache/,下次请求直接读它,完全绕过 PHP 执行。
- 确保
application/cache/目录权限为可写(如 755 或 777),否则缓存写不进去,也可能删不掉 - 在控制器方法中加
$this->output->cache(5);后,缓存就生效;但删掉这行代码不会立刻失效——要等过期时间到才自动清除 - 立即生效的做法是调用:
$this->output->delete_cache();(删当前 URI 缓存)
或$this->output->delete_cache('/news/list');(删指定路径) - 开发阶段更省事:直接清空整个
application/cache/文件夹(保留目录结构,删里头所有文件)
数据库查询缓存(db cache)需主动触发清除
如果你开启了 $this->db->cache_on(),SELECT 查询结果会存在 application/cache/db/ 下,按控制器+方法名建子目录。这类缓存**不会自动过期**,改了 SQL 或数据后必须手动清理。
- 清除某个页面的全部 DB 缓存:
$this->db->cache_delete('blog', 'index'); - 清除所有数据库缓存:
$this->db->cache_delete_all(); - 常见场景:后台新增文章后,在保存逻辑末尾加一行
$this->db->cache_delete_all();,避免列表页不刷新
缓存驱动缓存(file/apc/redis 等)要用对应驱动清理
当你用 $this->load->driver('cache') 加载 file、redis 等驱动时,它和 output 缓存、DB 缓存是独立的存储空间,不能靠删文件或调 delete_cache() 解决。
- 清空整个驱动:
$this->cache->clean(); - 删指定键:
$this->cache->delete('user_profile_123'); - 注意:如果配置了多个驱动(比如 redis 主 + file 备份),
clean()默认只清主驱动,需确认配置是否启用备份
开发环境建议关缓存或自动清理
本地调试时频繁改代码,开着缓存反而添乱。可在 app/config/config.php 中临时关闭:
- 注释或设
$config['cache_query'] = FALSE;(关 DB 缓存) - 控制器里不写
$this->output->cache(),或统一设为$this->output->cache(1/60);(1 秒过期) - 进阶做法:用钩子(hook)在每次请求前自动清理特定缓存,比如匹配
ENVIRONMENT === 'development'时执行$this->output->delete_cache()


















