Skip to content

Commit

Permalink
refactor(store/redis): Use same technique for key concat as memory store
Browse files Browse the repository at this point in the history
  • Loading branch information
novln committed May 24, 2023
1 parent e45215c commit 6b0fc1a
Showing 1 changed file with 13 additions and 9 deletions.
22 changes: 13 additions & 9 deletions drivers/store/redis/store.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,6 @@ package redis

import (
"context"
"fmt"
"strings"
"sync"
"sync/atomic"
Expand Down Expand Up @@ -98,22 +97,19 @@ func NewStoreWithOptions(client Client, options limiter.StoreOptions) (limiter.S

// Increment increments the limit by given count & gives back the new limit for given identifier
func (store *Store) Increment(ctx context.Context, key string, count int64, rate limiter.Rate) (limiter.Context, error) {
key = fmt.Sprintf("%s:%s", store.Prefix, key)
cmd := store.evalSHA(ctx, store.getLuaIncrSHA, []string{key}, count, rate.Period.Milliseconds())
cmd := store.evalSHA(ctx, store.getLuaIncrSHA, []string{store.getCacheKey(key)}, count, rate.Period.Milliseconds())
return currentContext(cmd, rate)
}

// Get returns the limit for given identifier.
func (store *Store) Get(ctx context.Context, key string, rate limiter.Rate) (limiter.Context, error) {
key = fmt.Sprintf("%s:%s", store.Prefix, key)
cmd := store.evalSHA(ctx, store.getLuaIncrSHA, []string{key}, 1, rate.Period.Milliseconds())
cmd := store.evalSHA(ctx, store.getLuaIncrSHA, []string{store.getCacheKey(key)}, 1, rate.Period.Milliseconds())
return currentContext(cmd, rate)
}

// Peek returns the limit for given identifier, without modification on current values.
func (store *Store) Peek(ctx context.Context, key string, rate limiter.Rate) (limiter.Context, error) {
key = fmt.Sprintf("%s:%s", store.Prefix, key)
cmd := store.evalSHA(ctx, store.getLuaPeekSHA, []string{key})
cmd := store.evalSHA(ctx, store.getLuaPeekSHA, []string{store.getCacheKey(key)})
count, ttl, err := parseCountAndTTL(cmd)
if err != nil {
return limiter.Context{}, err
Expand All @@ -130,8 +126,7 @@ func (store *Store) Peek(ctx context.Context, key string, rate limiter.Rate) (li

// Reset returns the limit for given identifier which is set to zero.
func (store *Store) Reset(ctx context.Context, key string, rate limiter.Rate) (limiter.Context, error) {
key = fmt.Sprintf("%s:%s", store.Prefix, key)
_, err := store.client.Del(ctx, key).Result()
_, err := store.client.Del(ctx, store.getCacheKey(key)).Result()
if err != nil {
return limiter.Context{}, err
}
Expand All @@ -143,6 +138,15 @@ func (store *Store) Reset(ctx context.Context, key string, rate limiter.Rate) (l
return common.GetContextFromState(now, rate, expiration, count), nil
}

// getCacheKey returns the full path for an identifier.
func (store *Store) getCacheKey(key string) string {
buffer := strings.Builder{}
buffer.WriteString(store.Prefix)
buffer.WriteString(":")
buffer.WriteString(key)
return buffer.String()
}

// preloadLuaScripts preloads the "incr" and "peek" lua scripts.
func (store *Store) preloadLuaScripts(ctx context.Context) error {
// Verify if we need to load lua scripts.
Expand Down

0 comments on commit 6b0fc1a

Please sign in to comment.