GoLang 関数のキャッシュの永続化と回復メカニズムは、次の手順で実装できます。 エンコーディングを使用して、キャッシュのコンテンツをファイルにシリアル化します。プログラムの再起動時にファイルからキャッシュの内容を読み取り、逆シリアル化します。永続キャッシュを使用すると、計算の不必要な重複が回避され、アプリケーションの再起動後も計算結果が確実に保持されます。
GoLang では、関数キャッシュは計算結果をメモリに保存する最適化技術であり、計算のオーバーヘッドを削減します。関数呼び出し。ただし、アプリケーションが再起動されたり、システム障害が発生したりすると、キャッシュされたコンテンツが失われる可能性があります。この記事では、関数キャッシュの永続化および回復メカニズムを実装して、アプリケーションの再起動後もキャッシュのコンテンツを確実に利用できるようにする方法を紹介します。
関数キャッシュを永続化するには、次の手順を使用できます。
encoding/json
を使用してキャッシュのコンテンツをエンコードします。文字セクション配列に変換します。 cache.json
など) に書き込みます。 // 将缓存对象序列化到文件中 func SaveCache(cache map[string]interface{}) error { data, err := json.Marshal(cache) if err != nil { return err } f, err := os.Create("cache.json") if err != nil { return err } defer f.Close() _, err = f.Write(data) if err != nil { return err } return nil }
永続関数キャッシュを復元するには、次の手順を使用できます。
cache など) から.json
) を使用してバイト配列を読み取ります。 encoding/json
を使用してバイト配列を逆シリアル化し、キャッシュ オブジェクトを再作成します。 // 从文件中加载并反序列化缓存 func LoadCache() (map[string]interface{}, error) { data, err := ioutil.ReadFile("cache.json") if err != nil { return nil, err } cache := make(map[string]interface{}) if err := json.Unmarshal(data, &cache); err != nil { return nil, err } return cache, nil }
n
番目のフィボナッチ数を計算するために使用される次の関数 Fib(n)
について考えてみましょう。関数キャッシュを使用して、すでに計算されたフィボナッチ数を保存し、不必要な繰り返し計算を避けることができます。
// 计算第 n 个斐波那契数 func Fib(n int) int { if n < 2 { return n } cache := make(map[int]int) // 作为函数缓存 return fibHelper(n, cache) } // 使用函数缓存重复计算斐波那契数 func fibHelper(n int, cache map[int]int) int { if _, ok := cache[n]; !ok { cache[n] = fibHelper(n-1, cache) + fibHelper(n-2, cache) } return cache[n] }
cache
パラメータを使用してクロージャで Fib
関数をラップすることで、関数キャッシュを永続化して復元できます。
// 重载后的 Fib 函数,接受一个作为参数的缓存 func FibWithCache(cache *map[int]int, n int) int { if *cache == nil { // 初始化缓存时从文件中加载 cacheToLoad, err := LoadCache() if err != nil { *cache = make(map[int]int) } else { *cache = cacheToLoad } } return fibHelper(n, *cache) }
これで、FibWithCache
が呼び出されるたびに、同じ関数キャッシュ *cache
が使用および変更されます。プログラムの再起動後にファイルからキャッシュを再ロードすることで、アプリケーションが終了しても計算結果が確実に保持されます。
以上がgolang 関数キャッシュの永続化と回復メカニズムの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。