From afe73c81e7d962c694a4683b4c2f9db042896eb0 Mon Sep 17 00:00:00 2001 From: xing Date: Wed, 19 Mar 2025 23:21:34 +0800 Subject: [PATCH] optimize code --- app/middleware/iplimit.go | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/app/middleware/iplimit.go b/app/middleware/iplimit.go index 3d091ea..5f85790 100755 --- a/app/middleware/iplimit.go +++ b/app/middleware/iplimit.go @@ -158,23 +158,25 @@ func IpLimit(num int64, clearNum ...int64) (func(ctx *gin.Context), func(int64, return CustomFlowLimit[string](a, num, clearNum...) } +const minute = "2006-01-02 15:04" + func IpMinuteLimit(num int64, clearNum ...int64) (func(ctx *gin.Context), func(int64, ...int64)) { a := NewFlowLimits(func(c *gin.Context) string { - return str.Join(c.ClientIP(), "|", time.Now().Format("2006-01-02 15:04")) + return str.Join(c.ClientIP(), "|", time.Now().Format(minute)) }, ToManyRequest(), IpMinuteLimitDeferFn, ) return CustomFlowLimit(a, num, clearNum...) } -func IpMinuteLimitDeferFn(_ *gin.Context, m LimitMap[string], k string, _ *int64, currentTotalFlow int64) { +func IpMinuteLimitDeferFn(_ *gin.Context, m LimitMap[string], _ string, _ *int64, currentTotalFlow int64) { cNum := atomic.LoadInt64(m.ClearNum) - minu := strings.Split(k, "|")[1] if currentTotalFlow <= cNum { + now, _ := time.Parse(minute, time.Now().Format(minute)) m.Mux.Lock() for key := range m.Map { - t := strings.Split(key, "|")[1] - if minu != t { + minu, _ := time.Parse(minute, strings.Split(key, "|")[1]) + if now.Sub(minu) > 0 { delete(m.Map, key) } }