Laravel Horizon即将到来,所以我希望将我的队列从beanstalkd切换到Redis,以利用更好的队列监控。
但是,偶尔我必须执行php artisan cache:clear
。但如果我这样做,因为我的队列现在在Redis中,它将消除我的所有工作,如GitHub issue中所述。
建议是制作一个单独的Redis实例。以下是我的问题:
php artisan cache:clear
现在只会清除我的缓存正在使用的Redis实例中的数据,而我的队列工作者Redis服务器不受影响是否正确?在进一步搜索互联网后,我遇到了this discussion。
php artisan cache:clear
只清除该号码吗?同一实例上的其他DB编号不受影响吗?答案 0 :(得分:5)
php artisan cache:清除只清除那个DB号码吗?
这是准确的。向Redis发送cache:clear
命令sends a FLUSHDB
命令,仅擦除Redis数据库中用于存储缓存数据的数据。
为每个Laravel服务在单个 Redis实例中隔离数据的标准方法是为 config / database.php中的每个服务分配不同的数据库我>:
'redis' => [
'default' => [
...
'database' => 0,
],
'cache' => [
...
'database' => 1,
],
],
上面的配置指示Laravel使用数据库1
存储缓存数据,并使用数据库0
进行所有其他Redis操作。然后,当我们想要使用php artisan cache:clear
或app('cache')->flush()
等清除缓存时,Laravel不会删除存储在Redis中的其他数据。
我们可以通过创建单独的连接来扩展此配置模式,这些连接为每个会话,队列和广播API指定不同的Redis数据库。随着应用程序的增长,这为管理数据提供了更大的灵活性。
当然,对于大型应用程序,我们甚至可能会为每个服务使用不同的Redis服务器来提高可伸缩性,因为我们的应用程序数据超出了单个Redis服务器的限制。