package global import ( "strconv" "sun-panel/lib/cache" ) type RateLimiter struct { Minute cache.Cacher[int] Hour cache.Cacher[int] } func (r *RateLimiter) MinuteAddOnce(userId uint) { key := "user_" + strconv.Itoa(int(userId)) times := r.MinuteGet(userId) + 1 // fmt.Println("fen册数", times) r.Minute.SetKeepExpiration(key, times) // r.Minute.SetDefault(key, times) } func (r *RateLimiter) MinuteGet(userId uint) int { if v, ok := r.Minute.Get("user_" + strconv.Itoa(int(userId))); !ok { return 0 } else { return v } } func (r *RateLimiter) HourAddOnce(userId uint) { key := "user_" + strconv.Itoa(int(userId)) times := r.HourGet(userId) + 1 // fmt.Println("hour册数", times) r.Hour.SetKeepExpiration(key, times) // r.Hour.SetDefault(key, times) } func (r *RateLimiter) HourGet(userId uint) int { if v, ok := r.Hour.Get("user_" + strconv.Itoa(int(userId))); !ok { return 0 } else { return v } }