함수 캐싱은 반복 계산을 방지하고 성능을 향상시키기 위해 사용되는 최적화 기술입니다. 캐시 크기가 메모리 제한을 초과하는 경우 Redis를 사용하는 등 타사 스토리지를 결합하여 캐시 용량을 확장할 수 있습니다. 실제로 Redis에서는 많은 수의 쿼리 결과를 캐시할 수 있으므로 성능이 크게 향상됩니다.
Golang 함수 캐시와 타사 저장소 결합 연습
함수 캐시는 반복 계산을 방지하고 애플리케이션 성능을 향상시키는 데 사용되는 최적화 기술입니다. Golang에서 sync/syncmap 패키지는 간단한 함수 캐시 구현을 제공합니다. 그러나 캐시 집약적인 애플리케이션의 경우 타사 스토리지를 활용하여 캐시 용량을 확장해야 할 수도 있습니다.
import ( "sync" ) var cache = sync.Map{} func Get(key string) (interface{}, bool) { return cache.Load(key) } func Set(key string, value interface{}) { cache.Store(key, value) }
캐시 크기가 메모리 제한을 초과하는 경우 타사 저장소를 결합하여 캐시 용량을 확장할 수 있습니다. Redis를 스토리지 백엔드로 사용하는 예는 다음과 같습니다.
import ( "context" "sync" "time" "github.com/go-redis/redis/v8" ) // 将 sync/syncmap 作为一级缓存 var cache = sync.Map{} // 使用 Redis 作为二级缓存 var redisClient = redis.NewClient(&redis.Options{ Addr: "localhost:6379", Password: "", DB: 0, }) // 设置缓存超时时间(秒) var cacheTimeout = 600 // 从一级缓存获取数据,如果没有则从 Redis 获取并设置到一级缓存中 func Get(key string) (interface{}, bool) { if val, ok := cache.Load(key); ok { return val, true } val, err := redisClient.Get(context.Background(), key).Result() if err != nil { return nil, false } cache.Store(key, val) return val, true } // 设置缓存数据,同时存储到 Redis 中 func Set(key string, value interface{}) { cache.Store(key, value) expireCtx := context.Background() if err := redisClient.Set(expireCtx, key, value, cacheTimeout*time.Second).Err(); err != nil { // 处理可能的错误 } }
실용적인 예: 다수의 쿼리 결과 캐싱
동일한 데이터베이스 쿼리를 다수 수행해야 하는 애플리케이션이 있다고 가정해 보겠습니다. 성능을 최적화하기 위해 함수 캐싱을 활용하여 반복 쿼리를 방지할 수 있습니다. 그러나 쿼리 결과 집합이 크기 때문에 모든 결과를 메모리에 저장하면 사용 가능한 메모리를 초과하게 됩니다.
타사 스토리지와 결합된 기능 캐시를 사용하면 자주 쿼리하는 결과를 Redis에 저장할 수 있습니다. 이렇게 하면 메모리 제한이 초과되더라도 애플리케이션이 이러한 결과에 빠르게 액세스할 수 있어 성능이 크게 향상됩니다.
위 내용은 golang 함수 캐시와 타사 저장소 결합 실습의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!