Reputation: 3060
I have a production laravel application and the staging application running on the same server. I am running redis, which I am using as my queue driver. They are obviously connected to different databases. The question is if jobs that are pushed onto the reds queue from the staging application will interfere with the production db and vice versa.
Upvotes: 14
Views: 11057
Reputation: 488
You can set the default Laravel queue in .env for the Redis.
REDIS_QUEUE=your_app1_queuename
By default this is 'default',
this used in config/queue.php. This will mean multiple Laravel apps can use the same Redis instance.
Upvotes: 0
Reputation: 1961
As of Laravel 5.5.22 the cache prefix is using the APP_NAME
environment variable. You can rely on that if that's enough or alternatively you may configure the prefix by using the CACHE_PREFIX
environment variable that is not set by default.
If you're using Laravel Horizon to manage your queues, you can simply override the HORIZON_PREFIX
environment variable to let Horizon differentiate between your applications running side by side.
Upvotes: 7
Reputation: 24035
I had this same problem, and it took me hours to find the solution.
https://laravel.com/docs/5.6/queues#driver-prerequisites says:
In order to use the
redis
queue driver, you should configure a Redis database connection in yourconfig/database.php
configuration file.
And then https://laravel.com/docs/5.6/redis#predis says:
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.
Reading the "connection parameters" page, I eventually found https://github.com/nrk/predis/wiki/Client-Options, which says that 'prefix' is a supported option.
So, you can edit your config/database.php
configuration file to have:
'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,
],
],
I'm not sure if you then need to restart Redis or Supervisord.
Upvotes: 17
Reputation: 3900
You can set the prefix Laravel uses for the Redis cache. By default this is laravel
, so all keys are stored as laravel:keyname
and Laravel takes care of the logic to add/remove this prefix when saving/getting.
You can set the prefix in config/cache.php
. You could leave the main one as laravel
and set your staging app prefix to stage
or something. This will mean multiple Laravel apps can use the same Redis instance.
Upvotes: 11