package entry import ( "sync" ) // Store is the interface which is responsible to store the cache entries. type Store interface { // Get returns an entry based on its key. Get(key string) *Entry // Set sets an entry based on its key. Set(key string, e *Entry) // Delete deletes an entry based on its key. Delete(key string) } // memStore is the default in-memory store for the cache entries. type memStore struct { entries map[string]*Entry mu sync.RWMutex } var _ Store = (*memStore)(nil) // NewMemStore returns a new in-memory store for the cache entries. func NewMemStore() Store { return &memStore{ entries: make(map[string]*Entry), } } // Get returns an entry based on its key. func (s *memStore) Get(key string) *Entry { s.mu.RLock() e := s.entries[key] s.mu.RUnlock() return e } // Set sets an entry based on its key. func (s *memStore) Set(key string, e *Entry) { s.mu.Lock() s.entries[key] = e s.mu.Unlock() } // Delete deletes an entry based on its key. func (s *memStore) Delete(key string) { s.mu.Lock() delete(s.entries, key) s.mu.Unlock() }