Sobes.tech
Junior — Middle

Kannst du ein Beispiel für einen Ansatz zur Organisation des Cachings von Daten in einem System geben?

sobes.tech KI

Antwort von AI

In Go werden häufig eingebaute Datenstrukturen wie map mit zusätzlicher Logik zur Verwaltung der Lebensdauer des Caches (TTL) verwendet. Ein einfacher Ansatz ist die Erstellung einer Struktur, die die Daten und ihre Erstellungszeit speichert, und bei der Abfrage zu prüfen, ob die Daten veraltet sind.

Beispiel für einen einfachen Cache mit 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("Cached value:", val)
    } else {
        fmt.Println("Value not found or expired")
    }
}

Dieser Ansatz eignet sich für einfache Anwendungsfälle. Für komplexere Systeme werden spezialisierte Bibliotheken oder externe Caches (Redis, Memcached) verwendet.