store.go 1.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152
  1. package entry
  2. import (
  3. "sync"
  4. )
  5. // Store is the interface which is responsible to store the cache entries.
  6. type Store interface {
  7. // Get returns an entry based on its key.
  8. Get(key string) *Entry
  9. // Set sets an entry based on its key.
  10. Set(key string, e *Entry)
  11. // Delete deletes an entry based on its key.
  12. Delete(key string)
  13. }
  14. // memStore is the default in-memory store for the cache entries.
  15. type memStore struct {
  16. entries map[string]*Entry
  17. mu sync.RWMutex
  18. }
  19. var _ Store = (*memStore)(nil)
  20. // NewMemStore returns a new in-memory store for the cache entries.
  21. func NewMemStore() Store {
  22. return &memStore{
  23. entries: make(map[string]*Entry),
  24. }
  25. }
  26. // Get returns an entry based on its key.
  27. func (s *memStore) Get(key string) *Entry {
  28. s.mu.RLock()
  29. e := s.entries[key]
  30. s.mu.RUnlock()
  31. return e
  32. }
  33. // Set sets an entry based on its key.
  34. func (s *memStore) Set(key string, e *Entry) {
  35. s.mu.Lock()
  36. s.entries[key] = e
  37. s.mu.Unlock()
  38. }
  39. // Delete deletes an entry based on its key.
  40. func (s *memStore) Delete(key string) {
  41. s.mu.Lock()
  42. delete(s.entries, key)
  43. s.mu.Unlock()
  44. }