package cache import ( "time" gocache "github.com/patrickmn/go-cache" ) // Service defines the interface for cache operations type Service interface { Set(key string, value interface{}, ttl time.Duration) Get(key string) (interface{}, bool) Delete(key string) Flush() ItemCount() int } // InMemoryService implements Service using go-cache library type InMemoryService struct { cache *gocache.Cache } // NewInMemoryService creates a new in-memory cache service // defaultTTL: default time-to-live for cache items // cleanupInterval: interval at which expired items are cleaned up func NewInMemoryService(defaultTTL, cleanupInterval time.Duration) Service { c := gocache.New(defaultTTL, cleanupInterval) return &InMemoryService{cache: c} } // Set stores a value in the cache with the specified TTL func (s *InMemoryService) Set(key string, value interface{}, ttl time.Duration) { s.cache.Set(key, value, ttl) } // Get retrieves a value from the cache // Returns the value and true if found, nil and false if not found or expired func (s *InMemoryService) Get(key string) (interface{}, bool) { val, found := s.cache.Get(key) return val, found } // Delete removes an item from the cache func (s *InMemoryService) Delete(key string) { s.cache.Delete(key) } // Flush clears all items from the cache func (s *InMemoryService) Flush() { s.cache.Flush() } // ItemCount returns the number of items currently in the cache func (s *InMemoryService) ItemCount() int { return s.cache.ItemCount() }