【发布时间】:2017-04-26 17:50:33
【问题描述】:
我有一个带有 redis 的 laravel (5.3) 应用程序,用于会话(使用 predis)。只要我使用单个 redis 节点(使用 config/database.php 中的默认方法),一切正常。一旦我切换到 Redis 集群,尽管我开始在 50% 的时间里遇到 MOVED 错误(根据谷歌搜索,我知道这应该由 predis 管理,但不知何故不是)。
我尝试将集群参数更改为 true,但随后出现奇怪的错误
No connection could be made because the target machine actively refused it. [tcp://127.0.0.1:6379]
虽然我使用的redis集群是部署在Azure中(通过.env文件配置的),并且在使用单节点时参数接受没有任何问题。
配置
这是我的 laravel 配置(如前所述,这是标准默认配置)
'redis' => [
'client' => 'predis',
'cluster' => false,
'default' => [
'host' => env('REDIS_HOST', 'localhost'),
'password' => env('REDIS_PASSWORD', null),
'port' => env('REDIS_PORT', 6379),
'database' => 0,
],
],
对于 Redis,我使用 Azure Redis Cache Cluster Premium P1,2 个分片(如 here 所述)。
更新 2
到目前为止,我还尝试了以下配置变体:
- 将集群设置为 true
- 将集群设置为 redis
- 添加默认值 -> 集群设置为 redis
- 添加默认值 -> 选项设置为 array('cluster', 'redis')
我一直收到 MOVED 错误...
我的Redis版本是3.2,predis/predis包1.1.1
predis 1.1+ 的工作配置
'redis' => [
'cluster' => true,
'default' => [
'host' => env('REDIS_HOST', 'localhost'),
'password' => env('REDIS_PASSWORD', null),
'port' => env('REDIS_PORT', 6379),
'database' => 0,
] ,
'options' => [
'cluster' => 'redis',
'parameters' => ['password' => env('REDIS_PASSWORD', null)],
],
],
非常感谢您的所有帮助:)
【问题讨论】:
-
我们可以看看你的配置吗?这是由 Laravel 通过 Predis 自动处理的。调用 Predis\Client 时,会传递一个参数,例如
['client' => 'redis']。这会自动处理-ASK和-MOVED响应。 -
我已经添加了配置。
-
看起来选项应该在
default键之外,并且数组应该是key=>value(你有两个值)。所以,我会说试试:'redis' => [ 'cluster' => true, 'default' => [ /*your config*/ ], 'options' => [ 'cluster' => 'redis' ], ]。让我们知道。
标签: laravel redis azure-caching