Consistent Hash 可用于 一致性哈希可用于解决服务器均衡问题。经配合 etcd使用
git 库地址:https://github.com/stathat/consistent
import "stathat.com/c/consistent" type Hash struct { consistent *consistent.Consistent } func (h *Hash) Add(key string) { h.consistent.Add(key) } func (h *Hash) Get(key string) (string, error) { return h.consistent.Get(key) } func (h *Hash) Remove(key string) { h.consistent.Remove(key) } func NewHash() *Hash { consistent := consistent.New() h := &Hash{consistent: consistent} return h }
test:
hash:=NewHash() hash.Add("aaa") hash.Add("abc") hash.Add("acd") fmt.Println(hash.Get("1")) fmt.Println(hash.Get("2")) fmt.Println(hash.Get("3")) fmt.Println(hash.Get("4")) fmt.Println(hash.Get("5")) fmt.Println(hash.Get("6"))
输出:abc <nil>
abc <nil>
abc <nil>
acd <nil>
abc <nil>
acd <nil>
总结:通常在集群环境下,hash.Add 添加 集群环境节点相关地址,hash.Get 通过参数值映射数据到集群节点地址。