@@ -28,17 +28,13 @@ func NewLimiter(redis rediser, fallbackLimiter *timerate.Limiter) *Limiter {
28
28
}
29
29
}
30
30
31
- //Delete deletes everything attached to a key.
32
- //Will delete all rate limiting attached to any given key.
33
- func (l * Limiter ) Teardown (name string ) (err error ) {
34
- keys , err := l .keys (name )
35
- if err != nil {
36
- return
37
- }
38
-
39
- for _ , k := range keys {
40
- err = l .delete (k )
41
- }
31
+ //Reset will reset the rate limit for a single key.
32
+ //In the given rate limit window.
33
+ func (l * Limiter ) Reset (name string , dur time.Duration ) (err error ) {
34
+ udur := int64 (dur / time .Second )
35
+ slot := time .Now ().Unix () / udur
36
+ name = fmt .Sprintf ("%s:%s-%d" , redisPrefix , name , slot )
37
+ err = l .delete (name )
42
38
43
39
return
44
40
}
@@ -110,10 +106,10 @@ func (l *Limiter) AllowRate(name string, rateLimit timerate.Limit) (delay time.D
110
106
return delay , allow
111
107
}
112
108
113
- func (l * Limiter ) delete (names ... string ) (err error ) {
109
+ func (l * Limiter ) delete (name string ) (err error ) {
114
110
var del * redis.IntCmd
115
111
_ , err = l .redis .Pipelined (func (pipe * redis.Pipeline ) error {
116
- del = pipe .Del (names ... )
112
+ del = pipe .Del (name )
117
113
return nil
118
114
})
119
115
@@ -126,21 +122,6 @@ func (l *Limiter) delete(names ...string) (err error) {
126
122
return
127
123
}
128
124
129
- func (l * Limiter ) keys (name string ) ([]string , error ) {
130
- var keys * redis.StringSliceCmd
131
- _ , err := l .redis .Pipelined (func (pipe * redis.Pipeline ) error {
132
- //hard coded since we know the format
133
- keys = pipe .Keys ("rate:" + name + "*" )
134
- return nil
135
- })
136
-
137
- if err != nil {
138
- return []string {}, err
139
- }
140
-
141
- return keys .Result ()
142
- }
143
-
144
125
func (l * Limiter ) incr (name string , dur time.Duration , n int64 ) (int64 , error ) {
145
126
var incr * redis.IntCmd
146
127
_ , err := l .redis .Pipelined (func (pipe * redis.Pipeline ) error {
0 commit comments