Junior — Middle
Bir sistemdə məlumatların keşlənməsini təşkil etmək üçün yana bir nümunə verə bilərsinizmi?
sobes.tech Süni İntellekt
AI-dan cavab
Go-da məlumatların önbelleklənməsini təşkil etmək üçün tez-tez daxili məlumat strukturları, məsələn, map, əlavə logika ilə istifadə olunur, məsələn, TTL (müddət). Sadə bir yanaşma, məlumatları və onların yaradılma vaxtını saxlayan struktur yaratmaq və sorğuda məlumatların vaxtının keçmədiyini yoxlamaqdır.
TTL ilə sadə önbellek nümunəsi:
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("Keshdəki dəyər:", val)
} else {
fmt.Println("Dəyər tapılmadı və ya vaxtı keçdi")
}
}
Bu yanaşma sadə hallara uyğundur. Daha mürəkkəb sistemlər üçün ixtisaslaşmış kitabxanalar və ya xarici keşiklər (Redis, Memcached) istifadə olunur.