Golang のキャッシュが無効になった場合はどうすればよいですか?

WBOY
リリース: 2024-06-02 17:09:02
オリジナル
626 人が閲覧しました

Golang でキャッシュの無効化に対処する場合、次の戦略に従うことができます。キャッシュ項目にタイムスタンプをマークし、期限切れになったら新しいデータを取得します。ロックを使用すると、コルーチンがキャッシュ項目を取得するとキャッシュがロックされ、キャッシュ項目が存在しないか期限切れになるとキャッシュのロックが解除されて新しいデータが取得されます。

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

Golang のキャッシュ障害に対処するにはどうすればよいですか?

Golang プログラムでキャッシュを使用する場合、データの一貫性と信頼性を確保するためにキャッシュの障害に対処することが重要です。以下に 2 つの処理戦略があります:

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 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!