63 lines
1.2 KiB
Go
63 lines
1.2 KiB
Go
package jwtx
|
|
|
|
import (
|
|
"context"
|
|
"fmt"
|
|
"time"
|
|
|
|
"github.com/patrickmn/go-cache"
|
|
)
|
|
|
|
var defaultDelimiter = ":"
|
|
|
|
type MemoryConfig struct {
|
|
CleanupInterval time.Duration
|
|
}
|
|
|
|
func NewMemoryCache(cfg MemoryConfig) Cacher {
|
|
return &memCache{
|
|
cache: cache.New(0, cfg.CleanupInterval),
|
|
}
|
|
}
|
|
|
|
type memCache struct {
|
|
cache *cache.Cache
|
|
}
|
|
|
|
func (a *memCache) getKey(ns, key string) string {
|
|
return fmt.Sprintf("%s%s%s", ns, defaultDelimiter, key)
|
|
}
|
|
|
|
func (a *memCache) Set(ctx context.Context, ns, key, value string, expiration ...time.Duration) error {
|
|
var exp time.Duration
|
|
if len(expiration) > 0 {
|
|
exp = expiration[0]
|
|
}
|
|
|
|
a.cache.Set(a.getKey(ns, key), value, exp)
|
|
return nil
|
|
}
|
|
|
|
func (a *memCache) Get(ctx context.Context, ns, key string) (string, bool, error) {
|
|
val, ok := a.cache.Get(a.getKey(ns, key))
|
|
if !ok {
|
|
return "", false, nil
|
|
}
|
|
return val.(string), ok, nil
|
|
}
|
|
|
|
func (a *memCache) Exists(ctx context.Context, ns, key string) (bool, error) {
|
|
_, ok := a.cache.Get(a.getKey(ns, key))
|
|
return ok, nil
|
|
}
|
|
|
|
func (a *memCache) Delete(ctx context.Context, ns, key string) error {
|
|
a.cache.Delete(a.getKey(ns, key))
|
|
return nil
|
|
}
|
|
|
|
func (a *memCache) Close(ctx context.Context) error {
|
|
a.cache.Flush()
|
|
return nil
|
|
}
|