From a77de3ad0728a23e028ae83de44d35477319ac6e Mon Sep 17 00:00:00 2001 From: Xargin Date: Tue, 10 Jul 2018 11:07:11 +0800 Subject: [PATCH] finished dist id --- ch6-cloud/ch6-07-dist-id.md | 59 +++++++++++++++++++++++++++++++++++++ 1 file changed, 59 insertions(+) diff --git a/ch6-cloud/ch6-07-dist-id.md b/ch6-cloud/ch6-07-dist-id.md index 624754a..580385d 100644 --- a/ch6-cloud/ch6-07-dist-id.md +++ b/ch6-cloud/ch6-07-dist-id.md @@ -162,3 +162,62 @@ redis 127.0.0.1:6379> SADD base64_encoding_of_last16bits MzI0Mgo= redis 127.0.0.1:6379> SADD base64_encoding_of_last16bits MzI0Mgo= (integer) 0 ``` + +使用起来也比较简单,有一些逻辑简单的函数就略去实现了: + +```go +package main + +import ( + "fmt" + "os" + "time" + + "github.com/sony/sonyflake" +) + +func getMachineID() (uint16, error) { + var machineID uint16 + var err error + machineID = readMachineIDFromLocalFile() + if machineID == 0 { + machineID, err = generateMachineID() + if err != nil { + return 0, err + } + } + + return machineID, nil +} + +func checkMachineID(machineID uint16) bool { + saddResult, err := saddMachineIDToRedisSet() + if err != nil || saddResult == 0 { + return true + } + + err := saveMachineIDToLocalFile(machineID) + if err != nil { + return true + } + + return false +} + +func main() { + t, _ := time.Parse("2006-01-02", "2018-01-01") + settings := sonyflake.Settings{ + StartTime: t, + MachineID: getMachineID, + } + + sf := sonyflake.NewSonyflake(settings) + id, err := sf.NextID() + if err != nil { + fmt.Println(err) + os.Exit(1) + } + + fmt.Println(id) +} +```