Sobes.tech
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).