如何配置Symfony缓存以使用AWS Redis只读副本
解决Symfony中Redis主从集群只读副本未被利用的问题
不需要自定义缓存适配器,Symfony自带的Redis缓存适配器原生支持主从架构的读写分离配置,按以下步骤调整即可:
1. 更新环境变量配置
在.env文件中添加只读副本的入口点信息:
REDIS_HOST=xxx-redis.yyy.ng.0001.zone.cache.amazonaws.com REDIS_PORT=6379 REDIS_REPLICA_HOST=xxx-redis-replica.yyy.ng.0001.zone.cache.amazonaws.com REDIS_REPLICA_PORT=6379
2. 调整cache.yaml配置
方式一:针对特定缓存池配置
如果只需要让app缓存池使用主从架构,修改配置如下:
framework: cache: app: cache.adapter.redis pools: app.cache: adapter: cache.adapter.redis provider: redis: dsn: 'redis://%env(REDIS_HOST)%:%env(int:REDIS_PORT)%' replica: dsn: 'redis://%env(REDIS_REPLICA_HOST)%:%env(int:REDIS_REPLICA_PORT)%'
方式二:全局默认配置
如果你希望所有Redis缓存池都使用主从架构,调整default_redis_provider为数组格式:
framework: cache: app: cache.adapter.redis default_redis_provider: redis: dsn: 'redis://%env(REDIS_HOST)%:%env(int:REDIS_PORT)%' replica: dsn: 'redis://%env(REDIS_REPLICA_HOST)%:%env(int:REDIS_REPLICA_PORT)%'
原理说明
配置完成后,Symfony的Redis适配器会自动路由请求:
- 写操作(如set、delete、flush) 会发送到主节点
- 读操作(如get、exists、keys) 会发送到只读副本
这样就能充分利用你的Redis集群资源,减轻主节点的读压力。
注意:确保你的Redis客户端(Predis或PhpRedis扩展)版本支持主从配置,建议使用最新稳定版。
内容的提问来源于stack exchange,提问作者Sergi
相关产品推荐
相关产品推荐

