Sobes.tech
Junior — Middle

Pouvez-vous donner un exemple d'approche pour organiser la mise en cache des données dans un système?

sobes.tech IA

Réponse de l'IA

En Go, pour organiser la mise en cache des données, on utilise souvent des structures de données intégrées, par exemple, map avec une logique supplémentaire pour gérer la durée de vie du cache (TTL). Une approche simple consiste à créer une structure qui stocke les données et leur heure de création, et lors de la requête, vérifier si les données sont périmées.

Exemple de cache simple avec 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("Valeur en cache :", val)
    } else {
        fmt.Println("Valeur non trouvée ou expirée")
    }
}

Cette approche convient pour des cas simples. Pour des systèmes plus complexes, on utilise des bibliothèques spécialisées ou des caches externes (Redis, Memcached).