Yii2.0.54生产环境缓存配置核心是选对后端、配稳连接、防单点、控失效:Redis单节点需设database和keyPrefix防冲突、加password与timeout防抖动;集群须用clusters数组并指定redis.class为yii\redis\Connection;Memcached须用memcached扩展并按权重配置多节点;必须配置DbCache降级及命中统计与TagDependency实现可观测与批量刷新。

Yii2.0.54 生产环境配置缓存组件,核心是选对后端、配稳连接、防单点、控失效。不追求最炫,而求稳定、可观测、易维护。
Redis 单节点:简洁可靠,适合中小流量
生产中若暂未上集群,单 Redis 节点仍是高性价比选择,但需规避常见疏漏:
-
必须指定 database 和 keyPrefix:避免多应用混用同一实例导致键冲突,例如
'database' => 2,'keyPrefix' => 'prod_app_v3_' -
密码和超时不可省略:即使内网也要设
'password';加'timeout' => 2和'retryInterval' => 10000防网络抖动引发阻塞 - 禁用持久化依赖逻辑:不要在缓存里存需强一致性的业务状态(如订单支付中),这类数据应走 DB + 消息队列
Redis 集群:自动分片,但配置要“反直觉”
Yii2.0.54 对 Redis 集群支持已较成熟,但配置方式与单节点不同,容易踩坑:
-
删掉 hostname/port,改用 clusters 数组:写成
'clusters' => ['10.0.1.10:7000', '10.0.1.11:7000', '10.0.1.12:7000'],不是嵌套 host/port 结构 - redis 子项 class 必须是 yii\redis\Connection:不能写成 yii\redis\Cluster,Yii 内部会自动识别集群模式
- 集群健康检查靠运维保障:Yii 不做节点探活,需配合 Consul 或自建心跳脚本确保列表中所有节点可连通且槽位分配完整
Memcached:高并发短周期场景首选
适用于 session 缓存、临时令牌、计数器等生命周期明确的场景:
-
只启用 memcached 扩展(非 memcache):否则
set($key, $value, $expire)中的过期时间会被忽略,缓存永不淘汰 -
多服务器按权重配置,不写死单一地址:例如两个节点,权重设为
['host'=>'mc1','port'=>11211,'weight'=>80]和['host'=>'mc2','port'=>11211,'weight'=>20] - 禁用长 TTL:Memcached 内存有限,避免设置 >1 天的过期时间,防止冷数据长期占位
兜底与可观测性:生产必须加的两道保险
缓存不是银弹,出问题时要有退路和线索:
-
DbCache 作降级方案:配置
'class' => 'yii\caching\DbCache'并建好 cache 表,当 Redis/Memcached 全挂时,自动切到数据库缓存(性能下降但服务不中断) -
统一开启缓存命中统计:在 cache 组件中加
'enableMetrics' => true(需 Yii 扩展支持),或自行包装 get/set 记录命中率、平均耗时,接入 Prometheus -
关键缓存加 TagDependency 管理生命周期:比如用户资料相关缓存统一绑定
new TagDependency(['tags' => 'user_profile']),更新用户信息时调一次TagDependency::invalidate('user_profile')即可批量刷新


















