欢迎您访问 最编程 本站为您分享编程语言代码,编程技术文章!
您现在的位置是: 首页

github.com/sony/sonyflake

最编程 2024-05-05 07:16:39
...

snoyflake侧重于多主机多实例的生命周期和性能,所以与snowflake使用了不同的位分配:

  • 比snowflake更长的生命周期,174年
  • 能运行在更多的实例上,216个
  • 生成id的速度比snowflake慢,10ms内最多生成28个

snoyflake在启动阶段需要配置参数,主要是一个Setting结构体

type Settings struct {
	StartTime      time.Time              // 起始时间,默认2014-09-01 00:00:00 +0000 UTC
	MachineID      func() (uint16, error) // 返回实例ID的函数,如果不定义此函外,默认用本机ip的低16位
	CheckMachineID func(uint16) bool      // 验证实例ID/计算机ID的唯一性,返回true时才创建
}

我们需要自己实现这两个函数:

func getMachineID() (uint16, error) {
	var machineID uint16 = 6
	return machineID, nil
}

func checkMachineID(machineID uint16) bool {
	existsMachines := []uint16{1, 2, 3, 4, 5}
	for _, v := range existsMachines {
		if v == machineID {
			return false
		}
	}
	return true
}
func main() {
	t, _ := time.Parse("2006-01-02", "2021-01-01")
	settings := sonyflake.Settings{
		StartTime:      t,
		MachineID:      getMachineID,
		CheckMachineID: checkMachineID,
	}

	sf := sonyflake.NewSonyflake(settings)

	for i := 0; i < 10; i++ {
		id, err := sf.NextID()
		if err != nil {
			fmt.Println(err)
			os.Exit(1)
		}
		fmt.Println(id)
	}
}

原文地址:https://www.cnblogs.com/aganippe/p/16114474.html

推荐阅读