Junior — Middle
Масалан, дар систем чӣ гуна муносибат кардан ба ташкил кардани кеши маълумотҳоро метавонед нишон диҳед?
sobes.tech AI
Ҷавоб аз AI
Дар Go барои ташкил кардани кэшгирии маълумотҳо, одатан структураҳои дарунсохти маълумот, масалан, map, бо логикаи иловагӣ барои идоракунии вақти зиндагии кэш (TTL) истифода мешаванд. Як роҳи содда — сохтани структура, ки маълумот ва вақти эҷодиашро нигоҳ медорад, ва дар вақти дархост кардан санҷад, ки маълумот тамом нашудааст.
Маслиҳати содда барои кэш бо 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("Қуттӣ дар кеш:", val)
} else {
fmt.Println("Қуттӣ ё тамом шудааст")
}
}
Ин усул барои ҳолатҳои содда мувофиқ аст. Барои системаҳои мураккабтар, китобхонаҳои махсус ё кешҳои беруна (Redis, Memcached) истифода мешаванд.