From 893476bd0b92132115073be0b59db1ef59ded26c Mon Sep 17 00:00:00 2001 From: hantmac Date: Tue, 24 Dec 2019 16:11:24 +0800 Subject: [PATCH] =?UTF-8?q?=E5=B0=9D=E8=AF=95=E8=A7=A3=E5=86=B3=E8=8A=82?= =?UTF-8?q?=E7=82=B9=E9=87=8D=E5=A4=8D=E6=B3=A8=E5=86=8C=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- backend/services/node.go | 45 +++++++++++++++++++++++----------------- backend/utils/helpers.go | 18 ++++++++++++++++ 2 files changed, 44 insertions(+), 19 deletions(-) diff --git a/backend/services/node.go b/backend/services/node.go index e6c2ac08..edaf9f16 100644 --- a/backend/services/node.go +++ b/backend/services/node.go @@ -167,27 +167,34 @@ func UpdateNodeData() { debug.PrintStack() return } - // 构造节点数据 - data := Data{ - Key: key, - Mac: mac, - Ip: ip, - Master: model.IsMaster(), - UpdateTs: time.Now(), - UpdateTsUnix: time.Now().Unix(), + + //先获取所有Redis的nodekey + list, _ := database.RedisClient.HKeys("nodes") + + if i := utils.Contains(list, key); i != -1 { + // 构造节点数据 + data := Data{ + Key: key, + Mac: mac, + Ip: ip, + Master: model.IsMaster(), + UpdateTs: time.Now(), + UpdateTsUnix: time.Now().Unix(), + } + + // 注册节点到Redis + dataBytes, err := json.Marshal(&data) + if err != nil { + log.Errorf(err.Error()) + debug.PrintStack() + return + } + if err := database.RedisClient.HSet("nodes", key, utils.BytesToString(dataBytes)); err != nil { + log.Errorf(err.Error()) + return + } } - // 注册节点到Redis - dataBytes, err := json.Marshal(&data) - if err != nil { - log.Errorf(err.Error()) - debug.PrintStack() - return - } - if err := database.RedisClient.HSet("nodes", key, utils.BytesToString(dataBytes)); err != nil { - log.Errorf(err.Error()) - return - } } func MasterNodeCallback(message redis.Message) (err error) { diff --git a/backend/utils/helpers.go b/backend/utils/helpers.go index 8a80e9e8..ce29e4b7 100644 --- a/backend/utils/helpers.go +++ b/backend/utils/helpers.go @@ -6,6 +6,7 @@ import ( "github.com/apex/log" "github.com/gomodule/redigo/redis" "io" + "reflect" "runtime/debug" "unsafe" ) @@ -40,3 +41,20 @@ func Close(c io.Closer) { //log.WithError(err).Error("关闭资源文件失败。") } } + +func Contains(array interface{}, val interface{}) (index int) { + index = -1 + switch reflect.TypeOf(array).Kind() { + case reflect.Slice: + { + s := reflect.ValueOf(array) + for i := 0; i < s.Len(); i++ { + if reflect.DeepEqual(val, s.Index(i).Interface()) { + index = i + return + } + } + } + } + return +} \ No newline at end of file