2017-06-02 111 views
1

Predis有什麼方法可以在創建實例時手動定義集羣插槽,以避免隨機選擇服務器並獲取插槽配置,因此請求會立即直接發送到正確的服務器該過程更快?Predis集羣插槽手動設置

回答

0

是的,你可以做到這一點使用連接參數:

$client = new Predis\Client([ 
    'tcp://node01?slots=0-5460', 
    'tcp://node02?slots=5461-10922', 
    'tcp://node03?slots=10923-16383', 
], ['cluster' => 'redis']); 

的「縫隙」連接參數可以接受一個逗號分隔的單插槽和連續的插槽範圍,例如列表:

tcp://node01?slots=0,20-30,5461-10922 
+0

嗨,從我測試的...這比讓Predis獲得插槽配置要快,但並不像連接到集羣單節點那樣快,直接從那裏獲取數據(我事先知道數據在該節點)。 Predis,事先知道插槽可以做單個連接(取決於關鍵的CRC16)以提高速度嗎?謝謝! – diegotez

+0

您可能提前知道該插槽,但不知道與其關聯的節點,因爲redis-cluster可以並在需要時自動重新平衡。即使通過連接參數預先配置插槽映射實際上也是一個最好的猜測,它應該保持更新才能生效。 – nrk

+0

也許你可以嘗試這樣的事情https://gist.github.com/nrk/e1463f6c81f4f70427f9fab2ef202777 它沒有測試,因爲我要通過內存,但它應該工作,你基本上配置客戶端與你的插槽地圖,然後您將底層連接提取到特定插槽,並從該連接實例中創建新的客戶端實例。這與Predis已經在內部完成的事情沒有什麼不同。 – nrk