Maison >développement back-end >Golang >Mécanisme de persistance et de récupération du cache de fonctions Golang
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.
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.
Pour conserver le cache de fonctions, vous pouvez suivre les étapes suivantes :
encoding/json
pour encoder le contenu du cache dans un tableau d'octets. 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 }
考虑以下函数 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
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 n
iè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!