From df051e0cfbfebcb255760f56750d55eaaba23e81 Mon Sep 17 00:00:00 2001 From: Lukasz Raczylo Date: Wed, 19 Feb 2025 20:33:26 +0000 Subject: [PATCH] Improve expiration logic. --- cache.go | 6 +++--- metadata_cache.go | 8 ++++++++ 2 files changed, 11 insertions(+), 3 deletions(-) diff --git a/cache.go b/cache.go index 471ddb6..43f09fc 100644 --- a/cache.go +++ b/cache.go @@ -40,7 +40,7 @@ type Cache struct { } // DefaultMaxSize is the default maximum number of items in the cache. -const DefaultMaxSize = 1000 +const DefaultMaxSize = 500 // NewCache creates a new empty cache instance that is ready for use. func NewCache() *Cache { @@ -128,8 +128,8 @@ func (c *Cache) Cleanup() { now := time.Now() for key, item := range c.items { - // Only remove items that are already expired - if now.After(item.ExpiresAt) { + // Remove items that are expired or within 10% of expiration + if now.After(item.ExpiresAt) || now.Add(time.Duration(float64(item.ExpiresAt.Sub(now))*0.1)).After(item.ExpiresAt) { c.removeItem(key) } } diff --git a/metadata_cache.go b/metadata_cache.go index 521f0b4..018691c 100644 --- a/metadata_cache.go +++ b/metadata_cache.go @@ -59,7 +59,15 @@ func (c *MetadataCache) GetMetadata(providerURL string, httpClient *http.Client, } c.metadata = metadata + // Calculate expiration time based on usage patterns +usageCount := 0 // This should be replaced with actual usage tracking logic +if usageCount < 10 { + c.expiresAt = time.Now().Add(30 * time.Minute) +} else if usageCount < 50 { c.expiresAt = time.Now().Add(1 * time.Hour) +} else { + c.expiresAt = time.Now().Add(2 * time.Hour) +} return metadata, nil }