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])]
}
复制代码

 

posted @   孤独的和弦  阅读(306)  评论(0编辑  收藏  举报
编辑推荐:
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· 展开说说关于C#中ORM框架的用法!
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
点击右上角即可分享
微信分享提示