2017-08-10 99 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服務器的限制。

相關問題