3.go開源groupcache項目——consistenthash代碼

來源:互聯網
上載者:User
這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。

3.go開源groupcache項目——consistenthash代碼

       Consistenthash代碼是提供ring hash的實現。

       包含兩個檔案consistenthash.go和consistenthash_test.go。

       包名叫做consistenthash

定義了一個Hash 函數,一個Map結構體。

1     Map結構體

定義一個hash變數,為函數返回不帶正負號的整數

一個INT的變數

一個INT數組

和一個map類型變數hashMap.

2     New函數

入參為一個整形和一個函數。

整形replicas作用是往裡add的時候需要複製的數量,其實也是多少鍵映射一個雜湊值的含義在裡面。

建立一個Map結構體。其中結構體中的hashMap使用make建立。

如果函數為nil,則賦值為crc32.ChecksumIEEE

3     IsEmpty函數

判斷Map結構體中keys的數量是否為0.

4     Add函數

入參為可變字串。

將鍵增加到hash中。

通過range來擷取入參,然後

將入參根據定義的雜湊函數進行雜湊得到雜湊值。

將Map結構體中的keys整形數組增加一個值,該雜湊值。

同時將入參變數加入到Map結構體中的hashMap變數中(map結構體),入參為鍵,雜湊值為索引值。

5     Get函數

入參為一個索引值(字串),根據提供的鍵來擷取接近的字串。

先判斷是否為空白。

然後根據根據字串來計算得到雜湊值。

然後根據sort包中的search函數,Search()方法使用“二分尋找”演算法來搜尋某指定切片[0:n],並返回能夠使f(i)=true的最小的i(0<=i<n)值,並且會假定,如果f(i)=true,則f(i+1)=true,即對於切片[0:n],i之前的切片元素會使f()函數返回false,i及i之後的元素會使f()函數返回true。但是,當在切片中無法找到時f(i)=true的i時(此時切片元素都不能使f()函數返回true),Search()方法會返回n(而不是返回-1)。

如果沒找到,則返回0.

最後返回Map結構體中hashMap變數中的對應的雜湊值。

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.