一致性環Hash算法.NET實現


一致性環Hash算法有一個大用處就是解決Memcache服務器down機問題的。目的是增加或者移除Memcache服務器后,最大限度的減少所受影響。

理論方面的就不介紹了,網上有太多資料了,請大家自己搜索搜索。

在此寫了一個ConsistencyRing類來實現算法,具體代碼在此下載

測試類如下:

public static void Test()
        {
            {
                ConsistencyRing cr = new ConsistencyRing();

                Console.WriteLine("=============AddServer Test=============");
                cr.AddServer("1");
                cr.AddServer("5");
                cr.AddServer("9");
                cr.AddServer("11");
                cr.AddServer("3");

                Console.WriteLine("=============RemoveServer Test=============");
                cr.RemoveServer("5");
                cr.RemoveServer("3");
                cr.RemoveServer("1");
                cr.RemoveServer("9");
            }

            {
                ConsistencyRing cr = new ConsistencyRing();

                cr.AddServer("1");
                cr.AddServer("5");
                cr.AddServer("9");
                cr.AddServer("11");
                cr.AddServer("3");

                Console.WriteLine("=============GetServerIp Test=============");
                string key;
                string serverIp;

                key = "A1";
                serverIp = cr[key];
                Console.WriteLine("A1所在IP:" + serverIp);

                cr.RemoveServer("9");
                serverIp = cr[key];
                Console.WriteLine("A1所在IP:" + serverIp);
            }
        }

上面AddServer/RemoveServer中的參數為了演示,因此改成了簡潔的數字string,大家使用時完全可以用192.168.1.1這樣的string來傳。 

運行結果:

可以看到,增加刪除節點后,都不會影響不相關節點。 

點擊代碼下載

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM