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) колдонулат.