GO · 성능
캐싱 전략
인메모리 캐시로 반복 연산을 줄입니다. TTL, LRU, 동시성 안전한 캐시를 구현합니다.
성능고급cachettlconcurrentgenerics
핵심 설명
인메모리 캐시로 반복 연산을 줄입니다. TTL, LRU, 동시성 안전한 캐시를 구현합니다.
Go code
package main
import (
"fmt"
"sync"
"time"
)
type CacheItem[V any] struct {
Value V
ExpiresAt time.Time
}
type Cache[K comparable, V any] struct {
mu sync.RWMutex
items map[K]CacheItem[V]
ttl time.Duration
}
func NewCache[K comparable, V any](ttl time.Duration) *Cache[K, V] {
return &Cache[K, V]{
items: make(map[K]CacheItem[V]),
ttl: ttl,
}
}
func (c *Cache[K, V]) Get(key K) (V, bool) {
c.mu.RLock()
defer c.mu.RUnlock()
item, ok := c.items[key]
if !ok || time.Now().After(item.ExpiresAt) {
var zero V
return zero, false
}
return item.Value, true
}
func (c *Cache[K, V]) Set(key K, value V) {
c.mu.Lock()
defer c.mu.Unlock()
c.items[key] = CacheItem[V]{
Value: value,
ExpiresAt: time.Now().Add(c.ttl),
}
}
func main() {
cache := NewCache[string, int](5 * time.Second)
cache.Set("count", 42)
if v, ok := cache.Get("count"); ok {
fmt.Println("캐시 히트:", v)
}
if _, ok := cache.Get("missing"); !ok {
fmt.Println("캐시 미스")
}
}학습 팁
캐시 TTL은 데이터 신선도와 성능 사이의 균형입니다. 변경이 드문 데이터는 긴 TTL, 자주 변하는 데이터는 짧은 TTL을 사용하세요.
주의할 점
캐시 만료를 확인하지 않으면 오래된 데이터를 반환합니다. 항상 TTL을 설정하고 만료된 항목을 정리하세요.
자주 묻는 질문
캐싱 전략란 무엇인가요?
인메모리 캐시로 반복 연산을 줄입니다. TTL, LRU, 동시성 안전한 캐시를 구현합니다.
캐싱 전략 학습 시 주의할 점은 무엇인가요?
캐시 만료를 확인하지 않으면 오래된 데이터를 반환합니다. 항상 TTL을 설정하고 만료된 항목을 정리하세요.
Continue Learning
Go 학습을 이어가세요
총 200개의 독립 HTML 학습 문서 중 하나입니다. 각 문서는 고유 URL과 canonical 메타데이터를 가집니다.