将 Redis 用于单个服务器上多个 Laravel 应用程序的队列
Using Redis for Queues for Multiple Laravel Applications on a Single Server
我在同一台服务器上有一个生产 laravel 应用程序和一个暂存应用程序 运行。我是 运行 redis,我将其用作我的队列驱动程序。它们显然连接到不同的数据库。问题是从暂存应用程序推送到 reds 队列的作业是否会干扰生产数据库,反之亦然。
您可以设置前缀 Laravel 用于 Redis 缓存。默认情况下,这是 laravel
,因此所有键都存储为 laravel:keyname
并且 Laravel 负责在 saving/getting.[=15 时 add/remove 此前缀的逻辑=]
您可以在config/cache.php
中设置前缀。您可以将主要的保留为 laravel
,并将您的登台应用程序前缀设置为 stage
或其他。这意味着多个 Laravel 应用程序可以使用同一个 Redis 实例。
我遇到了同样的问题,我花了好几个小时才找到解决方案。
https://laravel.com/docs/5.6/queues#driver-prerequisites 说:
In order to use the redis
queue driver, you should configure a Redis
database connection in your config/database.php
configuration file.
然后 https://laravel.com/docs/5.6/redis#predis 说:
In addition to the default host
, port
, database
, and password
server
configuration options, Predis supports additional connection parameters that may be defined for each of your Redis servers. To
utilize these additional configuration options, add them to your Redis
server configuration in the config/database.php
configuration file.
阅读 "connection parameters" 页面,我最终找到了 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,
],
],
我不确定您是否需要重新启动 Redis 或 Supervisord。
从 Laravel 5.5.22 开始,缓存前缀正在使用 APP_NAME
环境变量。如果足够的话,您可以依赖它,或者您可以使用默认情况下未设置的 CACHE_PREFIX
环境变量来配置前缀。
如果您使用 Laravel Horizon 来管理您的队列,您可以简单地覆盖 HORIZON_PREFIX
环境变量,让 Horizon 区分您的应用程序 运行 并排。
我在同一台服务器上有一个生产 laravel 应用程序和一个暂存应用程序 运行。我是 运行 redis,我将其用作我的队列驱动程序。它们显然连接到不同的数据库。问题是从暂存应用程序推送到 reds 队列的作业是否会干扰生产数据库,反之亦然。
您可以设置前缀 Laravel 用于 Redis 缓存。默认情况下,这是 laravel
,因此所有键都存储为 laravel:keyname
并且 Laravel 负责在 saving/getting.[=15 时 add/remove 此前缀的逻辑=]
您可以在config/cache.php
中设置前缀。您可以将主要的保留为 laravel
,并将您的登台应用程序前缀设置为 stage
或其他。这意味着多个 Laravel 应用程序可以使用同一个 Redis 实例。
我遇到了同样的问题,我花了好几个小时才找到解决方案。
https://laravel.com/docs/5.6/queues#driver-prerequisites 说:
In order to use the
redis
queue driver, you should configure a Redis database connection in yourconfig/database.php
configuration file.
然后 https://laravel.com/docs/5.6/redis#predis 说:
In addition to the default
host
,port
,database
, andpassword
server configuration options, Predis supports additional connection parameters that may be defined for each of your Redis servers. To utilize these additional configuration options, add them to your Redis server configuration in theconfig/database.php
configuration file.
阅读 "connection parameters" 页面,我最终找到了 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,
],
],
我不确定您是否需要重新启动 Redis 或 Supervisord。
从 Laravel 5.5.22 开始,缓存前缀正在使用 APP_NAME
环境变量。如果足够的话,您可以依赖它,或者您可以使用默认情况下未设置的 CACHE_PREFIX
环境变量来配置前缀。
如果您使用 Laravel Horizon 来管理您的队列,您可以简单地覆盖 HORIZON_PREFIX
环境变量,让 Horizon 区分您的应用程序 运行 并排。