From d59911f748d6e1d15b2809f1b31401f42796c9e4 Mon Sep 17 00:00:00 2001 From: "zhangkun9038@dingtalk.com" Date: Sat, 18 Jan 2025 23:41:14 +0800 Subject: [PATCH] =?UTF-8?q?=E6=8E=92=E6=9F=A52D=E5=91=A8=E6=9C=9FsortedSet?= =?UTF-8?q?=E5=91=A8=E6=9C=9F=E9=97=B4=E9=9A=94=E4=B8=8D=E7=BB=9F=E4=B8=80?= =?UTF-8?q?=E7=9A=84=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- candle.go | 30 +++++++++++++++++++++++++++--- 1 file changed, 27 insertions(+), 3 deletions(-) diff --git a/candle.go b/candle.go index ecee50e..a115ae6 100644 --- a/candle.go +++ b/candle.go @@ -181,6 +181,24 @@ func (core *Core) SaveCandle(instId string, period string, rsp *CandleData, dura leng := len(rsp.Data) // fmt.Println("saveCandle leng: ", leng, " instId: ", instId, " period: ", period) logrus.Info("saveCandles leng: ", leng, " instId: ", instId, " period: ", period, " length of rsp.Data: ", len(rsp.Data)) + // softCandleSegmentList + segments := core.Cfg.Config.Get("softCandleSegmentList").MustArray() + curSegStartTime := "" + for _, v := range segments { + cs := CandleSegment{} + sv, _ := json.Marshal(v) + json.Unmarshal(sv, &cs) + if !cs.Enabled { + continue + } + if cs.Seg == period { + curSegStartTime = cs.StartTime + } + break + } + curTm, _ := time.ParseInLocation("2006-01-02 15:04.000", curSegStartTime, time.Local) + curTmi := curTm.UnixMilli() + for k, v := range rsp.Data { tmi := ToInt64(v[0]) last := ToFloat64(v[4]) @@ -193,6 +211,12 @@ func (core *Core) SaveCandle(instId string, period string, rsp *CandleData, dura // logrus.Info("saveCandles last is 0: ", "v[4]: ", v[4], "v[4] type: ", ty, " v4It: ", v4It, "leng: ", leng, " instId: ", instId, " period: ", period, " length of rsp.Data: ", len(rsp.Data), " data:", rsp.Data) continue } + minutes, _ := core.PeriodToMinutes(period) + if (tmi-curTmi)/(minutes*1000000) != 0 { + logrus.Warn("saveCandles error: 当前记录中的时间戳:", curSegStartTime, ",并非周期节点:", period, " 忽略") + continue + } + ts, _ := Int64ToTime(tmi) candle := Candle{ InstID: instId, @@ -315,9 +339,9 @@ func (core *Core) SaveUniKey(period string, keyName string, extt time.Duration, refName := keyName + "|refer" refRes, _ := core.RedisLocalCli.GetSet(refName, 1).Result() core.RedisLocalCli.Expire(refName, extt) - // 为保证唯一性机制,防止SaveToSortSet 被重复执行 - founded, _ := core.findInSortSet(period, keyName, extt, tsi) - if len(refRes) != 0 && founded { + // 为保证唯一性机制,防止SaveToSortSet 被重复执行, ps: 不需要唯一,此操作幂等在redis里 + // founded, _ := core.findInSortSet(period, keyName, extt, tsi) + if len(refRes) != 0 { logrus.Error("refName exist: ", refName) return }