From bc822896fe4120b88745d0d594f6761554b32871 Mon Sep 17 00:00:00 2001 From: ensiouel <ensiouel@gmail.com> Date: Mon, 18 Dec 2023 14:49:09 +0300 Subject: [PATCH] =?UTF-8?q?refactor:=20=D0=B4=D0=BE=D0=B1=D0=B0=D0=B2?= =?UTF-8?q?=D0=BB=D0=B5=D0=BD=20=D0=B8=D0=BD=D1=82=D0=B5=D1=80=D1=84=D0=B5?= =?UTF-8?q?=D0=B9=D1=81=20=D0=B4=D0=BB=D1=8F=20=D0=BA=D1=8D=D1=88=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pkg/cache/cache.go | 89 ---------------------------------------------- 1 file changed, 89 deletions(-) diff --git a/pkg/cache/cache.go b/pkg/cache/cache.go index dae11fc7..e8feb4ce 100644 --- a/pkg/cache/cache.go +++ b/pkg/cache/cache.go @@ -1,96 +1,7 @@ package cache -import ( - "fmt" - "time" - - "git.perx.ru/perxis/perxis-go/pkg/service" - lru "github.com/hashicorp/golang-lru/v2" - "go.uber.org/zap" -) - -const ( - defaultCacheSize = 1000 - defaultTTL = 30 * time.Second -) - type Cache interface { Set(key, value any) error Get(key any) (any, error) Remove(key any) error } - -var _ Cache = &MemoryCache{} - -type MemoryCache struct { - cache *lru.Cache[interface{}, interface{}] - ttl time.Duration - logger *zap.Logger -} - -type item struct { - value interface{} - expiredAt time.Time -} - -func NewCache(size int, ttl time.Duration, opts ...interface{}) *MemoryCache { - if size == 0 { - size = defaultCacheSize - } - if ttl == 0 { - ttl = defaultTTL - } - c, err := lru.New[interface{}, interface{}](size) - if err != nil { - panic(err) - } - ch := &MemoryCache{ - cache: c, - ttl: ttl, - logger: zap.NewNop(), - } - - for _, o := range opts { - switch p := o.(type) { - case *zap.Logger: - ch.logger = p - } - } - - ch.logger = ch.logger.Named("Cache") - - return ch -} - -func (c *MemoryCache) Set(key, value interface{}) (err error) { - c.cache.Add(key, &item{value: value, expiredAt: time.Now().Add(c.ttl)}) - c.logger.Debug("Set", zap.String("key", fmt.Sprintf("%v", key)), zap.String("ptr", fmt.Sprintf("%p", value))) - return nil -} - -func (c *MemoryCache) Get(key interface{}) (value interface{}, err error) { - val, ok := c.cache.Get(key) - if ok { - v := val.(*item) - if v.expiredAt.Before(time.Now()) { - _ = c.Remove(key) - c.logger.Debug("Expired", zap.String("key", fmt.Sprintf("%v", key)), zap.String("ptr", fmt.Sprintf("%p", v.value))) - return nil, service.ErrNotFound - } - c.logger.Debug("Hit", zap.String("key", fmt.Sprintf("%v", key)), zap.String("ptr", fmt.Sprintf("%p", v.value))) - return v.value, nil - } - c.logger.Debug("Miss", zap.String("key", fmt.Sprintf("%v", key))) - return nil, service.ErrNotFound -} - -func (c *MemoryCache) Remove(key interface{}) (err error) { - present := c.cache.Remove(key) - c.logger.Debug("Remove", zap.String("key", fmt.Sprintf("%v", key))) - - if !present { - err = service.ErrNotFound - } - - return -} -- GitLab