在单个服务器上将Redis用于多个Laravel应用程序的队列

时间:2015-07-07 15:15:11

标签: laravel redis queue

我有一个生产laravel应用程序和在同一台服务器上运行的登台应用程序。我正在运行redis,我将其用作我的队列驱动程序。它们显然连接到不同的数据库。问题是,从登台应用程序推送到红色队列的作业是否会干扰生产数据库,反之亦然。

3 个答案:

答案 0 :(得分:9)

我遇到了同样的问题,我花了好几个小时才找到解决方案。

https://laravel.com/docs/5.6/queues#driver-prerequisites说:

  

要使用redis队列驱动程序,您应该配置Redis   config/database.php配置文件中的数据库连接。

然后https://laravel.com/docs/5.6/redis#predis说:

  

除默认hostportdatabasepassword服务器外   配置选项,Predis支持可为每个Redis服务器定义的其他connection parameters。至   利用这些额外的配置选项,将它们添加到您的Redis   config/database.php配置文件中的服务器配置。

阅读"连接参数"页面,我最终找到了https://github.com/nrk/predis/wiki/Client-Options,其中说明了'前缀'是一个受支持的选项。

因此,您可以编辑config/database.php配置文件:

'redis' => [
        'client' => 'predis',
        'cluster' => false,
        'options'=>[
            'prefix' => env('REDIS_PREFIX', 'YOUR_PREFIX_HERE')
        ],
        'default' => [
            'host'     => env('REDIS_HOST', '127.0.0.1'),
            'password' => env('REDIS_PASSWORD', null),
            'port'     => env('REDIS_PORT', 6379),
            'database' => 0,
        ],
    ],

我不确定您是否需要重启Redis或Supervisord。

答案 1 :(得分:5)

您可以设置Laravel用于Redis缓存的前缀。默认情况下,这是laravel,因此所有键都存储为laravel:keyname,Laravel负责保存/获取时添加/删除此前缀的逻辑。

您可以在config/cache.php中设置前缀。您可以将主要版本保留为laravel,并将您的暂存应用前缀设置为stage或其他内容。这意味着多个Laravel应用程序可以使用相同的Redis实例。

答案 2 :(得分:1)

Laravel 5.5.22开始,缓存前缀正在使用APP_NAME环境变量。如果足够,您可以依靠它,或者可以使用默认情况下未设置的CACHE_PREFIX环境变量来配置前缀。

<code>CACHE_PREFIX</code>

如果您使用Laravel Horizo​​n管理队列,则可以简单地覆盖HORIZON_PREFIX环境变量,以使Horizo​​n在并行运行的应用程序之间进行区分。

<code>HORIZON_PREFIX</code>