如何配置Laravel 11通过PhpRedis连接AWS MemoryDB集群?
Laravel 11 配置PhpRedis连接AWS MemoryDB集群
问题背景
我有一个Laravel 11应用,尝试用PhpRedis连接AWS MemoryDB集群,按官方文档及资料配置后连接超时失败,但手动创建PhpRedis的RedisCluster对象可以正常连接:
$c = new RedisCluster(NULL, ['MY_CLUSTER_HOST_NAME:6379'], 1.5, 1.5, true, NULL, ['verify_peer' => false]);
请问如何将这个手动配置转换成Laravel的database.php配置,以便通过Laravel门面连接?以下是我目前的配置(添加context选项后似乎可用):
'redis' => [ 'client' => env('REDIS_CLIENT', 'phpredis'), 'options' => [ 'cluster' => env('REDIS_CLUSTER', 'redis'), 'prefix' => env('REDIS_PREFIX', 'myprefix'), // **Needed to add this for TLS to work** 'context' => [] ], 'clusters' => [ 'default' => [ [ 'url' => env('REDIS_URL'), 'host' => env('REDIS_HOST', '127.0.0.1'), 'username' => env('REDIS_USERNAME'), 'password' => env('REDIS_PASSWORD'), 'port' => env('REDIS_PORT', '6379'), 'database' => env('REDIS_DB', '0'), ], ], ],
解决方案:对应手动配置的Laravel Redis配置
将手动创建RedisCluster的参数逐一映射到Laravel的config/database.php中,调整后的完整配置如下:
'redis' => [ 'client' => env('REDIS_CLIENT', 'phpredis'), 'options' => [ 'cluster' => env('REDIS_CLUSTER', 'redis'), 'prefix' => env('REDIS_PREFIX', 'myprefix'), // 对应手动代码中的连接超时与读取超时(1.5秒) 'timeout' => 1.5, 'read_timeout' => 1.5, // 启用TLS连接,对应手动代码中的第5个参数true 'ssl' => true, // SSL上下文配置,禁用证书校验,对应手动代码最后一个参数 'context' => [ 'verify_peer' => false, ], // 对应手动代码中的NULL密码,用环境变量控制 'password' => env('REDIS_PASSWORD', null), ], 'clusters' => [ 'default' => [ [ 'host' => env('REDIS_HOST', 'MY_CLUSTER_HOST_NAME'), 'port' => env('REDIS_PORT', '6379'), // MemoryDB不支持多数据库,集群模式下无需指定database 'database' => null, ], ], ], ],
关键参数对应说明
timeout和read_timeout:对应手动RedisCluster构造函数的第3、4个参数,设置连接和读取的超时时间ssl => true:AWS MemoryDB强制要求TLS连接,对应手动代码中启用TLS的true参数context:传递SSL相关的配置,这里禁用证书校验,和手动代码中的最后一个参数保持一致- 集群模式下无需配置
url,直接指定集群节点的host和port即可;MemoryDB不支持Redis多数据库特性,所以将database设为null
内容的提问来源于stack exchange,提问作者ChaseMedallion
相关产品推荐
相关产品推荐

