Sobes.tech
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.