IdGenerator
IdGenerator copied to clipboard
遇到一个奇怪的问题,hash非常不均匀
hash规则是按 uid % 8 user := &model.User{ UID: utils.GenUID(), AppID: "aaaa", Account: "", Email: "", OpenID: fmt.Sprintf("%d", utils.GenUID()), UUID: fmt.Sprintf("%d", utils.GenUID()), Name: "name", Channel: "test", Avatar: "avatar", Password: fmt.Sprintf("%d", utils.GenUID()), }
ID不是连续的,每毫秒的第一个ID尾号是5。 可以用ID数值里的时间戳 % 8
可以了,但是这样上线后就不能动态修改长度了,只能换另外的hash算法了
最近在用kingshard,hash规则不能定义,用id就有问题了
你可以在雪花ID基础上*10+[1,2,3,4,5]的单循环数,然后用尾数做hash。 如果你想在kingshard中,使用整个ID做hash,那要求ID连续,这个做不到。
你可以在雪花ID基础上*10+[1,2,3,4,5]的单循环数,然后用尾数做hash。 如果你想在kingshard中,使用整个ID做hash,那要求ID连续,这个做不到。