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

Ben*_*Ben 5 queue redis laravel

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

Rya*_*yan 11

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

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

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

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

除了默认host,port,database,和password服务器配置选项,Predis支持额外的连接参数可能为每个Redis的服务器的定义.要使用这些附加配置选项,请将它们添加到config/database.php配置文件中的Redis服务器配置中.

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

因此,您可以编辑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,
        ],
    ],
Run Code Online (Sandbox Code Playgroud)

我不确定你是否需要重新启动Redis或Supervisord.


Bar*_*kes 7

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

<code>CACHE_PREFIX</code>

如果你使用 Laravel Horizo​​n 来管理你的队列,你可以简单地覆盖HORIZON_PREFIX环境变量,让 Horizo​​n 区分你并排运行的应用程序。

<code>HORIZON_PREFIX</code>


sam*_*les 5

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

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

  • Redis可以作为缓存使用,但是Redis作为队列驱动程序呢? (7认同)
  • 如果有人还在寻找解决方案,请参阅@ Ryan的回答.它适用于我 - 使用`php artisan queue:listen`和`php artisan tinker`进行测试以发送测试作业. (2认同)