haibei/pkg/jwtx/cache.go
2025-06-19 10:33:58 +08:00

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
}