相关疑难解决方法(0)

如何在Laravel中同时具有集群和非集群Redis连接

背景

过去,我可以像这样在我的配置中使用非集群式redis:

'redis' => [

    'default' => [
        'host' => env('REDIS_HOST', '127.0.0.1'),
        'password' => env('REDIS_PASSWORD', null),
        'port'     => 6379,
        'database' => 0,
        'cluster' => true,
    ]
],
Run Code Online (Sandbox Code Playgroud)

但是由于redis服务器上的负载,我必须对redis进行集群,当我拥有的唯一 redis连接被集群时,此配置可以正常工作(在大量工作后将其配置为):

'redis' => [
    'client' => 'predis',
    'cluster' => true,
    'options' => [
        'cluster' => 'redis',
        'parameters' => [
            'host' => env('REDIS_SHARD_1_HOST', '127.0.01'),
            'password' => env('REDIS_PASSWORD', null),
            'port' => env('REDIS_DEFAULT_PORT', 6379),
            'database' => 0,
            ],
        ],
    'clusters' => [
        'default' => [
            'host' => env('REDIS_SHARD_1_HOST', '127.0.01'),
            'password' => env('REDIS_PASSWORD', …
Run Code Online (Sandbox Code Playgroud)

php redis laravel predis redis-cluster

6
推荐指数
1
解决办法
178
查看次数

Redis群集主从服务器-无法添加密钥

我设置了Redis主从配置,其中有一个在同一台机器上运行的主(6379端口)和3个从(6380,6381,6382)。看起来集群已正确设置,因为在运行info命令中可以看到以下输出:

# Replication
role:master
connected_slaves:3
slave0:ip=127.0.0.1,port=6380,state=online,offset=29,lag=1
slave1:ip=127.0.0.1,port=6381,state=online,offset=29,lag=1
slave2:ip=127.0.0.1,port=6382,state=online,offset=29,lag=1
master_repl_offset:43
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:2
repl_backlog_histlen:42
Run Code Online (Sandbox Code Playgroud)

但是,无论我在哪里尝试在主服务器中添加新密钥,都会出现以下错误:

(error) CLUSTERDOWN Hash slot not served
Run Code Online (Sandbox Code Playgroud)

在Mac OS X Yosemite中使用redis-3.0.7。

redis

5
推荐指数
2
解决办法
1万
查看次数

Laravel + predis + Redis集群 - MOVED /无连接到127.0.0.1:6379

我有一个laravel(5.3)应用程序,redis用于会话(使用predis).只要我使用单个redis节点(使用config/database.php中的默认方法),一切正常.一旦我切换到Redis群集,虽然我开始得到MOVED错误,如50%的时间(基于谷歌搜索我明白这应该由predis管理,但不知何故不是).

我尝试将cluster参数更改为true,但后来我得到了一个奇怪的错误

No connection could be made because the target machine actively refused it. [tcp://127.0.0.1:6379] 
Run Code Online (Sandbox Code Playgroud)

虽然我使用的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,
        ],

    ],
Run Code Online (Sandbox Code Playgroud)

对于Redis的,我使用的Redis天青缓存集群高级P1,2个碎片(如所描述的在这里).

更新2

到目前为止,我还尝试了以下配置的变体:

  1. 将群集设置为true
  2. 将群集设置为redis
  3. 添加默认值 - >集群设置为redis
  4. 添加默认 - >选项设置为数组('cluster','redis')

我一直得到MOVED错误...

我的Redis版本是3.2,predis/predis包1.1.1

适用于predis 1.1+的工作配置

'redis' => [
        'cluster' => true,

        'default' => [
            'host' => env('REDIS_HOST', 'localhost'),
            'password' …
Run Code Online (Sandbox Code Playgroud)

redis laravel azure-caching

5
推荐指数
1
解决办法
7079
查看次数

标签 统计

redis ×3

laravel ×2

azure-caching ×1

php ×1

predis ×1

redis-cluster ×1