Sobes.tech
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) истифода мешаванд.