2017-08-10 95 views
1

Laravel Horizon即将到来,所以我期待将我的队列从beanstalkd切换到Redis以利用更好的队列监视。如何在同一台服务器上创建另一个Redis服务器实例(由Laravel Forge管理)

但是,偶尔我必须执行php artisan cache:clear。但是如果我这样做了,因为我的队列现在在Redis中,它将会清除我所有的工作,如GitHub issue中所讨论的。

建议做一个单独的Redis实例。以下是我的问题:

  1. 如何在我的Laravel Forge托管服务器中创建多个Redis服务器实例?
  2. 我应该在配置文件中更改哪些内容,以便会话和缓存指向一个Redis服务器实例,并且我的队列指向不同的Redis服务器实例? (现在知道这个问题的答案,请参阅编辑链接)
  3. 它是正确的,php artisan cache:clear现在只有消除数据在Redis的情况下,我的缓存使用,和我的队列工作Redis的服务器不会受到影响?

编辑

经进一步搜索互联网,我遇到this discussion

  1. 因此,我认为我并不需要创建单独的Redis服务器实例,只需使用不同的Redis DB编号即可。它是否正确?
  2. 请问php artisan cache:clear只消灭那个DB号码吗?同一实例上的其他DB号码不受影响?

回答

1

php artisan cache:清除只有该数据库编号?

这是准确的。将cache:clear命令sends a FLUSHDB命令发送给Redis,其中擦除选定用于存储缓存数据的Redis数据库中的数据。

的标准方法在一个单一的Redis实例为每个Laravel的服务,以隔离数据是分配给每个服务不同的数据库中配置/ database.php中

'redis' => [ 
    'default' => [ 
     ... 
     'database' => 0, 
    ], 
    'cache' => [ 
     ... 
     'database' => 1, 
    ], 
], 

上面的配置指示Laravel使用数据库1来存储缓存数据,而数据库0用于所有其他Redis操作。然后,当我们想要使用php artisan cache:clearapp('cache')->flush()等来清除缓存—等。— Laravel不会擦除存储在Redis中的其他数据。

我们可以通过创建单独的连接为每个会话,队列和广播API指定不同的Redis数据库来扩展此配置模式。随着应用程序的增长,这提供了更多的灵活性来管理数据。

当然,对于大型应用程序,我们甚至可能会针对每种服务使用不同的Redis服务器,以提高可伸缩性,因为我们的应用程序数据超出了单个Redis服务器的限制。

相关问题