zoukankan      html  css  js  c++  java
  • golang 实现简单的一致性哈希

    package main
    
    import (
        "fmt"
        "sort"
        "hash/crc32"
    )
    
    var serverMap  map[uint32]string
    var sortedKeys []int
    
    func main() {
    
        serverMap = make(map[uint32]string)
    
        var servers []string
        servers = append(servers,"192.168.1.100")
        servers = append(servers,"192.168.1.101")
        servers = append(servers,"192.168.1.102")
        servers = append(servers,"192.168.1.103")
        servers = append(servers,"192.168.1.104")
    
    
        for s:=range servers{
            serverMap[hashStr(servers[s])] = servers[s]
        }
    
        fmt.Println(serverMap)
    
        for k:=range serverMap{
            sortedKeys = append(sortedKeys,int(k))
        }
        sort.Ints(sortedKeys)
    
        fmt.Println(sortedKeys)
    
        obj1:=""
        obj2:=""
        obj3:=""
        obj4:=""
        obj5:=""
        obj6:=""
        obj7:=""
    
        obj1_key := hashStr(obj1)
        obj2_key := hashStr(obj2)
        obj3_key := hashStr(obj3)
        obj4_key := hashStr(obj4)
        obj5_key := hashStr(obj5)
        obj6_key := hashStr(obj6)
        obj7_key := hashStr(obj7)
    
    
        fmt.Println("obj1 ",obj1," hash,",obj1_key," stored at server ",getserver(int(obj1_key)))
        fmt.Println("obj2 ",obj2," hash,",obj2_key," stored at server ",getserver(int(obj2_key)))
        fmt.Println("obj3 ",obj3," hash,",obj3_key," stored at server ",getserver(int(obj3_key)))
        fmt.Println("obj4 ",obj4," hash,",obj4_key," stored at server ",getserver(int(obj4_key)))
        fmt.Println("obj5 ",obj5," hash,",obj5_key," stored at server ",getserver(int(obj5_key)))
        fmt.Println("obj6 ",obj6," hash,",obj6_key," stored at server ",getserver(int(obj6_key)))
        fmt.Println("obj7 ",obj7," hash,",obj7_key," stored at server ",getserver(int(obj7_key)))
    
    }
    //  MurMurHash算法
    func hashStr(key string) uint32 {
        return crc32.ChecksumIEEE([]byte(key))
    }
    
    func getserver(objkey int) string  {
    
        for _,v:=range sortedKeys{
            if  objkey<v{
                return serverMap[uint32(v)]
            }
    
        }
        return serverMap[uint32(sortedKeys[0])]
    }

  • 相关阅读:
    用Eclipse做J2Me开发的前期配置
    cglib和asm相关的文章
    bcp命令详解
    Oracle/PLSQL AFTER DELETE Trigger
    Mybatis(九)分页插件PageHelper使用
    Mybatis(八)逆向工程
    Mybatis(四)关联映射
    Mybatis(三)返回值四.注解配置
    Mybatis(二)参数(Parameters)传递
    Mybatis(一)实现单表的增删改查
  • 原文地址:https://www.cnblogs.com/mtour/p/8351095.html
Copyright © 2011-2022 走看看