Maison >développement back-end >Golang >Mécanisme de persistance et de récupération du cache de fonctions Golang

Mécanisme de persistance et de récupération du cache de fonctions Golang

王林
王林original
2024-05-04 10:51:021082parcourir

Le mécanisme de persistance et de récupération du cache de la fonction GoLang peut être implémenté en suivant les étapes suivantes : Utiliser l'encodage pour sérialiser le contenu du cache dans un fichier. Lisez et désérialisez le contenu du cache du fichier au redémarrage du programme. L'utilisation d'un cache persistant évite la duplication inutile des calculs et garantit que les résultats des calculs sont conservés lors des redémarrages de l'application.

Mécanisme de persistance et de récupération du cache de fonctions Golang

Mécanisme de persistance et de récupération du cache de fonctions GoLang

Dans GoLang, le cache de fonctions est une technologie d'optimisation qui réduit la surcharge de calcul des appels de fonction en stockant les résultats des calculs en mémoire. Cependant, le contenu mis en cache peut être perdu lors du redémarrage de l'application ou lors d'une panne du système. Cet article explique comment implémenter le mécanisme de persistance et de récupération du cache de fonctions pour garantir que le contenu du cache est toujours disponible après le redémarrage de l'application.

Persistance

Pour conserver le cache de fonctions, vous pouvez suivre les étapes suivantes :

  1. Utilisez encoding/json pour encoder le contenu du cache dans un tableau d'octets.
  2. encoding/json 编码缓存内容到字节数组中。
  3. 将字节数组写入文件,例如 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
}

恢复

要恢复持久化的函数缓存,可以使用如下步骤:

  1. 从文件(如 cache.json)中读取字节数组。
  2. 使用 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
}

实战案例

考虑以下函数 Fib(n),用于计算第 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]
}

通过将 Fib 函数包装在一个带有 cache 参数的闭包中,我们可以持久化并恢复函数缓存。

// 重载后的 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Écrivez un tableau d'octets dans un fichier, tel que cache.json. rrreee

Restore🎜🎜Pour restaurer le cache des fonctions persistantes, vous pouvez suivre les étapes suivantes : 🎜🎜🎜Lire le tableau d'octets à partir d'un fichier (tel que cache.json ) . 🎜Utilisez encoding/json pour désérialiser le tableau d'octets afin de recréer l'objet cache. rrreee🎜Cas pratique🎜🎜Considérons la fonction suivante Fib(n), qui est utilisée pour calculer le nième nombre de Fibonacci. Nous pouvons utiliser le cache de fonctions pour stocker les nombres de Fibonacci déjà calculés afin d'éviter des calculs répétés inutiles. 🎜rrreee🎜En enveloppant la fonction Fib dans une fermeture avec un paramètre cache, nous pouvons persister et restaurer le cache de la fonction. 🎜rrreee🎜Maintenant, chaque fois que FibWithCache est appelé, il utilisera et modifiera le même cache de fonctions *cache. En rechargeant le cache depuis le fichier après un redémarrage du programme, on s'assure que les résultats des calculs sont conservés même si l'application se termine. 🎜

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn