您好,登錄后才能下訂單哦!
這篇文章主要介紹Redis請求路由的示例分析,文中介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們一定要看完!
既然是重定向我們就應該了解,重定向指的是通過某種方法將原來的請求重新轉向其它的地方,那么Redis中的重定向指的到底是什么呢?我們知道Redis中的任何鍵都存儲到槽中,而通過上幾篇文章中我們知道在Redis集群環境中,槽被均勻的分布到多個主節點中了,所以在我們執行任何Redis命令時,和單節點有很大的不同,因為集群環境首先要計算鍵對應的槽,再根據槽找出相應的節點。如果計算之后,當前鍵所在的槽是當前節點,那么就直接處理該命令,如果計算完后,不是當前節點,則Redis會顯示MOVED重定向錯誤,也就是告訴客戶端該鍵所對應槽的正確節點是多少。這個就叫做Redis的重定向。下面我們演示一下上述所說的內容。
下面我們啟動一個新節點6387。因為該節點沒有添加到集群中,所以我們執行set命令時,可以直接返回成功。
下面我們在集群中執行同樣的命令。
我們看在集群環境中執行同樣的命令時,Redis提示了MOVED錯誤。原因也就是上述介紹中的那樣。下面我們看一下MOVED重定向的執行流程。也就是如下圖所示:
在Redis中我們可以使用cluster keyslot {key}命令查看key所對應的槽,然后在通過cluster nodes命令查看每個節點負責的槽,這樣我們就可以在執行命令的時候,就可以知道在哪個節點上執行了。我還還是已上圖的key為例。具體操作如下圖所示:
我們用cluster keyslot {key}命令查看鍵所在的槽是12691。然后我們通過cluster nodes命令知道節點6382負責的槽為12288-16383。所以我們在執行命令時,只有在6382節點上執行才能成功,在其它節點上執行Redis都會報MOVED重定向錯誤。下面我們將上述執行失敗的命令在6382節點執行。
在Redis中我們使用redis-cli執行命令時,我們可以添加-c參數,該參數會自動重定向,簡化我們手動重定向操作。
鍵命令執行主要分兩個步驟:計算槽,查找槽所在的節點。下面我們詳細介紹一下這兩方面的內容。
Redis根據鍵的使用CRC16函數計算鍵的散列值,然后在用散列值對16383取余,這樣使每個鍵都可以映射到0-16383槽范圍內。
Redis計算得到鍵所對應的槽后,需要查找槽所在的節點。集群內通過消息交換每個節點都會知道所有節點的槽的信息。根據MOVED重定向機制,客戶端可以隨機連接集群內的任意Redis獲取鍵的所在節點,這種客戶端叫做傀儡客戶端,它的優點是代碼實現簡單,對客戶端協議影響比較小,只需要根據重定向信息再次發送請求即可。但這樣也有它的弊端,也就是每次執行鍵命令前都要到Redis上進行重定向才能找到要執行命令的節點。這樣就額外的增加了IO開銷。正是因為這樣的弊端所以Redis提供了另一種技術實現,也叫Smart(智能)客戶端,在下一篇中,我們在介紹Smart相關的內容。
以上是“Redis請求路由的示例分析”這篇文章的所有內容,感謝各位的閱讀!希望分享的內容對大家有幫助,更多相關知識,歡迎關注億速云行業資訊頻道!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。