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