Skip to content

Commit a185c06

Browse files
committed
slight code changes for key reset
1 parent 4ab3419 commit a185c06

File tree

1 file changed

+9
-28
lines changed

1 file changed

+9
-28
lines changed

rate.go

Lines changed: 9 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -28,17 +28,13 @@ func NewLimiter(redis rediser, fallbackLimiter *timerate.Limiter) *Limiter {
2828
}
2929
}
3030

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)
4238

4339
return
4440
}
@@ -110,10 +106,10 @@ func (l *Limiter) AllowRate(name string, rateLimit timerate.Limit) (delay time.D
110106
return delay, allow
111107
}
112108

113-
func (l *Limiter) delete(names ...string) (err error) {
109+
func (l *Limiter) delete(name string) (err error) {
114110
var del *redis.IntCmd
115111
_, err = l.redis.Pipelined(func(pipe *redis.Pipeline) error {
116-
del = pipe.Del(names...)
112+
del = pipe.Del(name)
117113
return nil
118114
})
119115

@@ -126,21 +122,6 @@ func (l *Limiter) delete(names ...string) (err error) {
126122
return
127123
}
128124

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-
144125
func (l *Limiter) incr(name string, dur time.Duration, n int64) (int64, error) {
145126
var incr *redis.IntCmd
146127
_, err := l.redis.Pipelined(func(pipe *redis.Pipeline) error {

0 commit comments

Comments
 (0)