1
Predis有什麼方法可以在創建實例時手動定義集羣插槽,以避免隨機選擇服務器並獲取插槽配置,因此請求會立即直接發送到正確的服務器該過程更快?Predis集羣插槽手動設置
Predis有什麼方法可以在創建實例時手動定義集羣插槽,以避免隨機選擇服務器並獲取插槽配置,因此請求會立即直接發送到正確的服務器該過程更快?Predis集羣插槽手動設置
是的,你可以做到這一點使用連接參數:
$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
嗨,從我測試的...這比讓Predis獲得插槽配置要快,但並不像連接到集羣單節點那樣快,直接從那裏獲取數據(我事先知道數據在該節點)。 Predis,事先知道插槽可以做單個連接(取決於關鍵的CRC16)以提高速度嗎?謝謝! – diegotez
您可能提前知道該插槽,但不知道與其關聯的節點,因爲redis-cluster可以並在需要時自動重新平衡。即使通過連接參數預先配置插槽映射實際上也是一個最好的猜測,它應該保持更新才能生效。 – nrk
也許你可以嘗試這樣的事情https://gist.github.com/nrk/e1463f6c81f4f70427f9fab2ef202777 它沒有測試,因爲我要通過內存,但它應該工作,你基本上配置客戶端與你的插槽地圖,然後您將底層連接提取到特定插槽,並從該連接實例中創建新的客戶端實例。這與Predis已經在內部完成的事情沒有什麼不同。 – nrk