我有一个生产laravel应用程序和在同一台服务器上运行的登台应用程序。我正在运行redis,我将其用作我的队列驱动程序。它们显然连接到不同的数据库。问题是,从登台应用程序推送到红色队列的作业是否会干扰生产数据库,反之亦然。
答案 0 :(得分:9)
我遇到了同样的问题,我花了好几个小时才找到解决方案。
https://laravel.com/docs/5.6/queues#driver-prerequisites说:
要使用
redis
队列驱动程序,您应该配置Redisconfig/database.php
配置文件中的数据库连接。
然后https://laravel.com/docs/5.6/redis#predis说:
除默认
host
,port
,database
和password
服务器外 配置选项,Predis支持可为每个Redis服务器定义的其他connection parameters。至 利用这些额外的配置选项,将它们添加到您的Redisconfig/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
环境变量来配置前缀。
如果您使用Laravel Horizon管理队列,则可以简单地覆盖HORIZON_PREFIX
环境变量,以使Horizon在并行运行的应用程序之间进行区分。