codeigniter 将 redis 作为缓存驱动而非数据库,ci 3.x 需手动引入 cache_redis.php 并扩展 $valid_drivers,ci 4.x 已内置支持;配置在 app/config/cache.php 中设 $handler = 'redis' 并填写 $redis 参数;使用 \config\services::cache() 获取实例后调用 get/save/delete 方法操作缓存。

CodeIgniter 框架本身不把 Redis 当作“数据库缓存”,而是作为缓存驱动(Cache Driver)使用——即缓存查询结果、配置、会话等临时数据,而非替代 MySQL/PostgreSQL 等主数据库。要让 CI 用 Redis 加速读取(比如缓存 DB 查询结果或全局配置),需完成三步:启用 Redis 缓存驱动、正确配置连接参数、在代码中调用缓存接口。
确认版本与驱动支持
CI 3.x 原生不带 cache_redis 驱动,需手动引入;CI 4.x 已内置 Redis 和 Predis 两种驱动,开箱即用。
-
CI 3.x:需从官方 develop 分支或社区维护版获取
Cache_redis.php,复制到application/libraries/Cache/drivers/,并修改Cache.php的$valid_drivers数组,加入'cache_redis' -
CI 4.x:无需额外文件,直接配置即可。框架自动检测扩展(
ext-redis)或使用predis/predisComposer 包
配置 Redis 连接参数
在 CI 4.x 中,所有缓存配置集中于 app/Config/Cache.php:
- 设置
$handler = 'redis'(启用 Redis 主驱动) - 填写
$redis数组:包括host、port、password(如有)、database(默认 0)、timeout等 - 可选配
$backupHandler = 'file',当 Redis 不可用时自动降级到文件缓存
示例片段:
Redis 缓存和数据结构管理技能。通过自然语言操作 Redis,支持 String、Hash、List、Set、ZSet、Stream 等数据结构操作。当用户提到 Redis、缓存、消息队列、会话存储时使用此技能。
$redis = [
'host' => '127.0.0.1',
'port' => 6379,
'password' => '',
'database' => 0,
'timeout' => 0,
'read_timeout' => 0,
'retry_interval' => 100,
];
在控制器或模型中使用缓存
不依赖数据库类,而是通过 Cache 服务统一操作:
- 获取实例:
$cache = \Config\Services::cache(); - 读取缓存:
$data = $cache->get('user_profile_123'); - 写入缓存(含 TTL):
$cache->save('user_profile_123', $result, 300); // 5分钟 - 删除缓存:
$cache->delete('user_profile_123');
若想缓存某次数据库查询结果,可这样封装:
$key = 'latest_posts_' . $limit;
if (! $posts = $cache->get($key)) {
$posts = $this->db->limit($limit)->get('posts')->getResult();
$cache->save($key, $posts, 600);
}
验证与调试
运行命令行检查是否生效:
-
php spark cache:info—— 查看缓存状态(仅 file 驱动支持详细信息) -
php spark cache:clear—— 清空当前缓存(Redis 中所有键都会被清掉) - 用
redis-cli monitor实时观察 CI 是否真的在读写 key
注意:确保 PHP 已安装 redis 扩展(php -m | grep redis),且 Redis 服务正在运行并可被 Web 用户访问。










