codeigniter 页面缓存开启需区分版本:ci3 用 $this->output->cache($n) 简单启用,ci4 需配置 cache.php 的 $ttl 并通过中间件或 setcache() 设置响应头,同时注意存储权限、查询参数、session 及状态码等影响因素。

CodeIgniter 页面缓存开启简单,但要注意版本差异:CI3 和 CI4 的实现方式不同。下面分场景说明,重点讲清楚怎么开、怎么设时间、以及关键细节。
CI3 中快速开启页面缓存
在控制器方法任意位置插入一行代码即可:
-
$this->output->cache($n); —— 其中 $n 是缓存分钟数,比如
5表示缓存 5 分钟 - 这行代码放哪儿都行,不依赖执行顺序,也不需要提前配置(默认使用文件缓存)
- 缓存生效后,后续请求会直接返回已生成的 HTML,跳过控制器逻辑和视图渲染
CI4 中启用页面缓存需两步走
CI4 不再用 output->cache(),而是通过中间件或响应头控制,更灵活但也需要手动配置:
- 先确认
app/Config/Cache.php中的$ttl值(单位是秒),比如300表示 5 分钟 - 在路由定义时启用缓存中间件,例如:
$routes->get('news', 'News::index')->setMiddleware(['cache']); - 或在控制器方法内手动设置响应缓存头:
$response->setCache(['max-age' => 300, 's-maxage' => 300]);
缓存存储位置与处理器选择
缓存是否真正生效,还取决于底层存储配置:
- CI4 默认用 file 处理器,缓存文件存在
writeable/cache/目录下 - 如需更高性能,可切换为 Redis 或 Memcached,在
app/Config/Cache.php中修改$handler并配置对应连接参数 - 注意
file缓存的storePath必须有写入权限,否则缓存静默失败
哪些情况缓存不会生效
即使开了缓存,也可能被绕过,常见原因包括:
- 请求带查询参数(如
?v=1),且$cacheQueryString = false(CI4 默认不缓存带参 URL) - 用户已登录或存在活跃 Session,部分中间件自动跳过缓存
- 响应状态码不是 200(如 404、302),CI4 默认不缓存非 200 响应
- 控制器方法里调用了
$response->noCache()或设置了禁用缓存头











