跳转到主内容
新派编程网 - 新潮编程理念,全新技术课堂!

如何在CodeIgniter中使用RedisCache_CodeIgniter高速缓存方案【高速】

CI3和CI4使用Redis缓存需注意三点:配置修改后必须清理writable/cache/config/并执行php spark cache:clear;CI4必须安装ext-redis扩展而非Predis;cache->save()必须显式传入整数$ttl,且key须加作用域前缀避免冲突。 CI 3 和 CI 4 使用 Redis 缓存不是配个 host 就能跑通的事——配置不清理、扩展装错、
save()
漏传
$ttl
,三者任一都会让缓存静默失效。 CI4 启用 Redis 必须装 ext- redis ,不是 predis CI4 的
Cache
驱动底层调用的是 PHP 原生
Redis
类,不是 Predis 库。装错扩展会直接报
Class 'Redis' not found
,且启动时就失败。 Ubuntu/Debian:
sudo apt-get install php-redis
;装完执行
php -m | grep redis
,有输出才算成功 CentOS/RHEL:
yum install php-pecl-redis
Docker 环境:PHP 容器内必须装扩展,且
host
不能写
localhost
,得填 Redis 服务名(如
redis
) 重启 Web 服务或 PHP-FPM 才能让扩展生效,仅重启 Nginx/Apache 不够 改了 app/Config/Cache.php 为什么还是走 file? CI4 启动时只读一次缓存配置,并编译缓存到
writable/cache/config/
。改完配置不清理,等于白改。 必须手动删掉
writable/cache/config/
下所有文件 再运行
php spark cache:clear
(这个命令清的是运行时缓存,不是配置缓存) 检查是否误改了旧路径
application/config/cache.php
—— CI4 已废弃该位置 运行
php spark cache:info
确认当前生效的
handler
确实是
redis
cache->save()
不传
$ttl
会导致线上缓存提前失效
$cache->save('key', 'value')
看似简洁,但第三个参数
$ttl
是整数秒,不传就用配置里的
$defaultTime
(默认 300 秒)。很多线上问题就出在这里:本想缓存 1 小时,结果 5 分钟就过期了。 必须显式传整数,如
$cache->save('user:123', $data, 3600)
传浮点数(如
30.5
)会被截断为
30
,不报错但逻辑偏移 传
0
表示“永不过期”,Redis 实际发
SET
命令,不可靠;文件驱动更不准 高频数据建议设
1800
或
3600
;用户 token 类建议精确到
900
(15 分钟) 缓存 key 命名不加前缀,等于给所有模块埋雷 CI4 对 key 长度有硬限制(Redis 默认 255 字节),空格和控制符会被过滤。更危险的是 key 冲突:订单模块和用户模块都用
user_123
,互相覆盖。 必须加作用域前缀,如
user:profile:123
、
order:status:456
避免拼接明文敏感信息(如手机号、token 原值) 不用长动态字符串作 key,优先哈希后截取,如
substr(md5($uid . $params), 0, 16)
千万别动配置里的
$prefix
—— 一改,所有旧 key 全失效,等同于全量缓存击穿 真正卡住人的从来不是“怎么连上 Redis”,而是配置没清、
$ttl
没传、key 没隔离——这三处不盯死,缓存就是个摆设。

相关文章