Junior — Middle
Μπορείτε να δώσετε ένα παράδειγμα προσέγγισης για την οργάνωση της προσωρινής μνήμης δεδομένων σε ένα σύστημα;
sobes.tech AI
Απάντηση από AI
Στην Go, για την οργάνωση της προσωρινής αποθήκευσης δεδομένων, συχνά χρησιμοποιούνται ενσωματωμένες δομές δεδομένων, όπως το map, με πρόσθετη λογική για τη διαχείριση του χρόνου ζωής της cache (TTL). Μια απλή προσέγγιση είναι η δημιουργία μιας δομής που αποθηκεύει τα δεδομένα και τον χρόνο δημιουργίας τους, και κατά το αίτημα ελέγχει αν τα δεδομένα έχουν λήξει.
Παράδειγμα απλής cache με TTL:
package main
import (
"fmt"
"sync"
"time"
)
type cacheItem struct {
value interface{}
expiration time.Time
}
type Cache struct {
items map[string]cacheItem
mu sync.RWMutex
ttl time.Duration
}
func NewCache(ttl time.Duration) *Cache {
return &Cache{
items: make(map[string]cacheItem),
ttl: ttl,
}
}
func (c *Cache) Set(key string, value interface{}) {
c.mu.Lock()
defer c.mu.Unlock()
c.items[key] = cacheItem{
value: value,
expiration: time.Now().Add(c.ttl),
}
}
func (c *Cache) Get(key string) (interface{}, bool) {
c.mu.RLock()
defer c.mu.RUnlock()
item, found := c.items[key]
if !found || time.Now().After(item.expiration) {
return nil, false
}
return item.value, true
}
func main() {
cache := NewCache(5 * time.Minute)
cache.Set("user_1", "John Doe")
if val, ok := cache.Get("user_1"); ok {
fmt.Println("Αποθηκευμένη τιμή:", val)
} else {
fmt.Println("Τιμή δεν βρέθηκε ή έχει λήξει")
}
}
Αυτή η προσέγγιση είναι κατάλληλη για απλές περιπτώσεις. Για πιο πολύπλοκα συστήματα, χρησιμοποιούνται εξειδικευμένες βιβλιοθήκες ή εξωτερικές cache (Redis, Memcached).