Sobes.tech
Senior

Nima kesh qilindi? Faqat kataloglarmi?

sobes.tech AI

AIdan javob

Kesh qilish faqat kataloglarga emas, balki tez-tez so'raladigan va kam o'zgaradigan boshqa ma'lumot turlariga ham qo'llaniladi. Masalan:

  • Murakkab hisoblashlar yoki agregatsiya natijalari, har bir so'rovda qayta hisoblamaslik uchun.
  • Tashqi API-lardan javoblar, yuklamani kamaytirish va kechikishni qisqartirish uchun.
  • Foydalanuvchi sessiyalari va autentifikatsiya tokenlari, tezkor kirish uchun.

Go tilida odatda, xavfsizlik uchun mutex bilan map yoki uchinchi tomon caching kutubxonalarini (masalan, groupcache, ristretto) ishlataman, ular TTL, eskirgan ma'lumotlarni avtomatik o'chirish va samarali xotira boshqaruvini ta'minlaydi.

Oddiy TTL bilan cache misoli:

import (
    "sync"
    "time"
)

type CacheItem struct {
    Value      interface{}
    Expiration int64
}

type Cache struct {
    items map[string]CacheItem
    mu    sync.RWMutex
}

func (c *Cache) Set(key string, value interface{}, duration time.Duration) {
    c.mu.Lock()
    defer c.mu.Unlock()
    c.items[key] = CacheItem{
        Value:      value,
        Expiration: time.Now().Add(duration).UnixNano(),
    }
}

func (c *Cache) Get(key string) (interface{}, bool) {
    c.mu.RLock()
    defer c.mu.RUnlock()
    item, found := c.items[key]
    if !found || time.Now().UnixNano() > item.Expiration {
        return nil, false
    }
    return item.Value, true
}