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