diff --git a/cache.go b/cache.go index 77b3ccc..51ae31a 100644 --- a/cache.go +++ b/cache.go @@ -14,15 +14,13 @@ func calculateHash(c *fiber.Ctx) string { } func enableCache() { - cfg.Cache.CacheClient = libpack_cache.New(time.Duration(cfg.Cache.CacheTTL) * time.Second * 2) + cfg.Cache.CacheClient = libpack_cache.New(time.Duration(cfg.Cache.CacheTTL) * time.Second * 100) } func cacheLookup(hash string) []byte { - if cfg.Cache.CacheClient != nil { - obj, found := cfg.Cache.CacheClient.Get(hash) - if found { - return obj - } + obj, found := cfg.Cache.CacheClient.Get(hash) + if found { + return obj } return nil } diff --git a/cache/cache.go b/cache/cache.go index 0e9a8a9..a57f46a 100644 --- a/cache/cache.go +++ b/cache/cache.go @@ -44,23 +44,22 @@ func (c *Cache) cleanupRoutine(globalTTL time.Duration) { func (c *Cache) Set(key string, value []byte, ttl time.Duration) { c.Lock() defer c.Unlock() + expiresAt := time.Now().Add(ttl) - now := time.Now() - expiresAt := now.Add(ttl) - if expiresAt.After(now.Add(c.globalTTL)) { - expiresAt = now.Add(c.globalTTL) + // Get a byte slice from the pool and ensure it's properly sized. + b := c.bytePool.Get().([]byte) + if cap(b) < len(value) { + b = make([]byte, len(value)) + } else { + b = b[:len(value)] } - // Allocate a byte slice from the pool. + copy(b, value) + entry := CacheEntry{ - Value: c.bytePool.Get().([]byte), + Value: b, ExpiresAt: expiresAt, } - - // Copy the value into the byte slice. - copy(entry.Value, value) - - // Set the entry in the cache. c.entries.Store(key, entry) } @@ -76,7 +75,6 @@ func (c *Cache) Get(key string) ([]byte, bool) { // Copy the value from the byte slice. value := make([]byte, len(entry.(CacheEntry).Value)) copy(value, entry.(CacheEntry).Value) - return value, true } diff --git a/cache_test.go b/cache_test.go index 307e533..e076935 100644 --- a/cache_test.go +++ b/cache_test.go @@ -27,7 +27,7 @@ func (suite *Tests) Test_cacheLookup() { { name: "test_existent", args: args{ - hash: "00000000000000000000000000000000000001", + hash: "00000000000000000000000000000000001337", }, want: []byte("it's fine."), addCache: struct { @@ -40,7 +40,7 @@ func (suite *Tests) Test_cacheLookup() { for _, tt := range tests { suite.T().Run(tt.name, func(t *testing.T) { if tt.addCache.data != nil { - cfg.Cache.CacheClient.Set(tt.args.hash, tt.addCache.data, time.Duration(1)*time.Second) + cfg.Cache.CacheClient.Set(tt.args.hash, tt.addCache.data, time.Duration(90*time.Second)) } got := cacheLookup(tt.args.hash) assert.Equal(tt.want, got, "Unexpected cache lookup result")