>백엔드 개발 >Golang >Golang 캐시 무효화를 처리하는 방법은 무엇입니까?

Golang 캐시 무효화를 처리하는 방법은 무엇입니까?

WBOY
WBOY원래의
2024-06-02 17:09:02674검색

Golang에서 캐시 무효화를 처리할 때 다음 전략을 따를 수 있습니다. 캐시 항목에 타임스탬프를 표시하고 만료되면 새 데이터를 가져옵니다. 잠금을 사용하면 코루틴이 캐시 항목을 얻을 때 캐시가 잠기고, 캐시 항목이 존재하지 않거나 만료되면 캐시가 잠금 해제되고 새 데이터를 얻습니다.

如何处理 Golang 缓存失效的情况?

Golang 캐시 오류를 처리하는 방법은 무엇입니까?

Golang 프로그램에서 캐시를 사용할 때는 데이터 일관성과 안정성을 보장하기 위해 캐시 오류를 처리하는 것이 중요합니다. 다음은 두 가지 처리 전략입니다.

1. 타임스탬프를 사용하여

  • 캐시 항목을 타임스탬프와 연결합니다.
  • 캐시 아이템이 만료되면 새로운 데이터를 받아 캐시를 업데이트하세요.
type CacheItem struct {
    Value interface{}
    Timestamp time.Time
}

var cache = make(map[string]CacheItem)

func SetCache(key string, value interface{}) {
    cache[key] = CacheItem{Value: value, Timestamp: time.Now()}
}

func GetCache(key string) (interface{}, bool) {
    item, ok := cache[key]
    if ok && time.Since(item.Timestamp) < time.Second*30 {
        return item.Value, true
    }
    return nil, false
}

2. 잠금 사용

  • 코루틴이 캐시 항목을 획득하면 캐시를 잠급니다.
  • 캐시 항목이 존재하지 않거나 만료된 경우 캐시를 잠금 해제하고 새 데이터를 얻으세요.
var cache = sync.Map{}

func SetCache(key string, value interface{}) {
    cache.Store(key, value)
}

func GetCache(key string) (interface{}, bool) {
    if value, ok := cache.Load(key); ok {
        return value, true
    }

    lock := sync.Mutex{}
    lock.Lock()
    defer lock.Unlock()

    if value, ok := cache.Load(key); ok {
        return value, true
    }

    newValue, err := fetchNewValue(key)
    if err == nil {
        cache.Store(key, newValue)
    }

    return newValue, err == nil
}

실용 사례

RESTful API에서 캐시를 사용하여 사용자 세부 정보를 저장한다고 가정해 보겠습니다.

아아아아

위 내용은 Golang 캐시 무효화를 처리하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.