1
0
Fork 0
mirror of https://github.com/Luzifer/badge-gen.git synced 2024-11-08 13:20:02 +00:00
badge-gen/cache/inMemCache.go
Knut Ahlers dc3fc39a2c
Fix linter errors
Signed-off-by: Knut Ahlers <knut@ahlers.me>
2023-09-08 14:23:22 +02:00

58 lines
1.1 KiB
Go

package cache
import (
"sync"
"time"
)
type inMemCacheEntry struct {
Value string
Expires time.Time
}
// InMemCache implements the Cache interface for storage in memory
type InMemCache struct {
cache map[string]inMemCacheEntry
lock sync.RWMutex
}
// NewInMemCache creates a new InMemCache
func NewInMemCache() *InMemCache {
return &InMemCache{
cache: map[string]inMemCacheEntry{},
}
}
// Get retrieves stored data
func (i *InMemCache) Get(namespace, key string) (value string, err error) {
i.lock.RLock()
defer i.lock.RUnlock()
e, ok := i.cache[namespace+"::"+key]
if !ok || e.Expires.Before(time.Now()) {
return "", ErrKeyNotFound
}
return e.Value, nil
}
// Set stores data
func (i *InMemCache) Set(namespace, key, value string, ttl time.Duration) (err error) {
i.lock.Lock()
defer i.lock.Unlock()
i.cache[namespace+"::"+key] = inMemCacheEntry{
Value: value,
Expires: time.Now().Add(ttl),
}
return nil
}
// Delete deletes data
func (i *InMemCache) Delete(namespace, key string) (err error) {
i.lock.Lock()
defer i.lock.Unlock()
delete(i.cache, namespace+"::"+key)
return nil
}