Sobes.tech
Junior — Middle

Vai jūs varētu sniegt piemēru pieeju datu kešatmiņas organizēšanai sistēmā?

sobes.tech AI

Atbilde no AI

Go valodā bieži tiek izmantotas iebūvētās datu struktūras, piemēram, map, ar papildu loģiku kešatmiņas dzīves ilguma (TTL) pārvaldībai. Vienkāršs pieejas veids ir izveidot struktūru, kas glabā datus un to izveides laiku, un pie pieprasījuma pārbauda, vai dati nav beigušies.

Piemērs vienkāršai kešatmiņai ar 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("Kešā esošā vērtība:", val)
    } else {
        fmt.Println("Vērtība nav atrasta vai ir beigusies")
    }
}

Šī pieeja ir piemērota vienkāršiem gadījumiem. Sarežģītākās sistēmās tiek izmantotas specializētas bibliotēkas vai ārējie kešatmiņas risinājumi (Redis, Memcached).