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