Junior — Middle
Siz tizimda ma'lumotlarni kesh qilishni tashkil qilish uchun yondashuv misolini keltira olasizmi?
sobes.tech AI
AIdan javob
Go tilida ma'lumotlarni kesh qilishni tashkil qilish uchun ko'pincha ichki ma'lumotlar tuzilmalari, masalan, map bilan qo'shimcha logika, masalan, TTL (hayot davomiyligi) bilan ishlatiladi. Oddiy yondashuv — ma'lumotlarni va ularning yaratilgan vaqtini saqlovchi tuzilma yaratish va so'rovda ma'lumotlar eskirmaganligini tekshirish.
TTL bilan oddiy kesh misoli:
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("Keshdagi qiymat:", val)
} else {
fmt.Println("Qiymat topilmadi yoki muddati o'tdi")
}
}
Bu yondashuv oddiy holatlar uchun mos. Murakkab tizimlar uchun maxsus kutubxonalar yoki tashqi keshlar (Redis, Memcached) ishlatiladi.