Maison  >  Article  >  développement back-end  >  Golang Learning Pratique d'intégration du cache d'applications Web

Golang Learning Pratique d'intégration du cache d'applications Web

王林
王林original
2023-06-24 08:40:361218parcourir

Golang est un langage de programmation open source développé par Google. Il est apprécié pour sa flexibilité, son efficacité et son évolutivité, notamment dans le développement d’applications Web. Cet article vise à présenter comment intégrer la mise en cache dans Golang pour améliorer les performances des applications Web.

1. La signification et le principe de la mise en cache

Le cache est une structure de données utilisée pour stocker les données fréquemment consultées afin d'améliorer la vitesse d'accès. La mise en cache accélère l'accès aux données en stockant les données en mémoire pour éviter les lectures fréquentes sur le disque.

L'utilisation de la mise en cache dans les applications Web est très courante. Lorsqu'une application Web doit récupérer des données, elle envoie généralement une requête de requête à la base de données. Le processus d'interrogation de la base de données peut prendre du temps, et si les mêmes données doivent être interrogées fréquemment, cela réduira les performances de l'application Web. Si les résultats de la requête sont mis en cache en mémoire, les performances du programme seront grandement améliorées.

2. Mise en cache dans Golang

Dans Golang, vous pouvez utiliser la bibliothèque de mise en cache intégrée ou une bibliothèque de mise en cache tierce pour implémenter la fonction de mise en cache.

  1. Bibliothèque de mise en cache intégrée

Golang fournit une bibliothèque de mise en cache intégrée - sync.Map. sync.Map est une table de hachage thread-safe qui permet la lecture et l'écriture simultanées sans surcharge de concurrence de verrouillage, elle est donc plus adaptée aux scénarios de concurrence élevée.

La mise en œuvre du cache à l'aide de sync.Map est très simple. Par exemple, nous pouvons définir un cache comme ceci :

var cache sync.Map

Ensuite, nous pouvons utiliser les méthodes Load et Store pour lire et stocker les données du cache. Par exemple, nous pouvons lire une entrée de cache avec la clé "foo" depuis le cache comme ceci :

if value, ok := cache.Load("foo"); ok {
    fmt.Println("value is", value)
}

Ensuite, nous pouvons stocker une entrée de cache avec la clé "foo" dans le cache comme ceci :

cache.Store("foo", "bar")

sync.Map Il y a d'autres méthodes, telles que Supprimer, Range, etc., qui peuvent nous aider à compléter la gestion du cache.

  1. Bibliothèque de mise en cache tierce

En plus d'utiliser sync.Map, nous pouvons également utiliser des bibliothèques de mise en cache tierces pour implémenter la mise en cache.

Redis est un système de mise en cache et de stockage clé-valeur couramment utilisé, idéal pour les applications Web. Dans Golang, de nombreuses bibliothèques client Redis tierces sont disponibles, telles que go-redis, redigo, etc.

Par exemple, nous pouvons utiliser go-redis pour implémenter la mise en cache. Tout d'abord, nous devons définir un client Redis :

client := redis.NewClient(&redis.Options{
    Addr: "localhost:6379",
    Password: "",
    DB: 0,
})

Ensuite, nous pouvons utiliser les méthodes Set et Get pour stocker les données dans le cache et lire les données du cache :

err := client.Set(context.Background(), "foo", "bar", 0).Err()
if err != nil {
    panic(err)
}

value, err := client.Get(context.Background(), "foo").Result()
if err != nil {
    panic(err)
}
fmt.Println("value is", value)

Il existe d'autres méthodes dans Redis, telles que Del, Existe, Expire, etc. peuvent nous aider à terminer la gestion du cache.

3. La pratique de la mise en cache

Dans les applications Web, la mise en cache est largement utilisée et peut être utilisée dans les fichiers statiques, les résultats de requêtes de base de données, les réponses API et d'autres scénarios.

Nous pouvons utiliser le framework Web tiers de Golang pour créer des applications Web. Par exemple, nous pouvons utiliser Gin comme framework web.

Voici un exemple de mise en cache utilisant Gin et sync.Map :

package main

import (
    "math/rand"
    "strconv"
    "sync"

    "github.com/gin-gonic/gin"
)

var cache sync.Map

func main() {
    r := gin.Default()

    r.GET("/cache/:key", func(c *gin.Context) {
        key := c.Param("key")
        if value, ok := cache.Load(key); ok {
            c.JSON(200, gin.H{
                "key": key,
                "value": value,
            })
        } else {
            value := strconv.Itoa(rand.Intn(100))
            cache.Store(key, value)
            c.JSON(200, gin.H{
                "key": key,
                "value": value,
            })
        }
    })

    r.Run()
}

Dans cet exemple, nous définissons une variable globale appelée cache, qui est une sync.Map. Lorsque nous accédons à "/cache/:key", nous recherchons d'abord la valeur correspondant à la clé dans le cache. Si la valeur est trouvée dans le cache, nous la renvoyons au client. Sinon, nous utilisons rand.Intn(100) pour générer un nombre aléatoire comme valeur et le stocker dans le cache.

Lorsque nous utilisons curl pour accéder à http://localhost:8080/cache/foo, le résultat sera similaire à :

{
    "key": "foo",
    "value": "42"
}

IV Conclusion

La mise en cache est une technologie très importante qui peut nous aider à améliorer les performances des programmes des applications Web. . Dans Golang, nous pouvons utiliser les bibliothèques de mise en cache intégrées sync.Map et tierces pour implémenter la mise en cache. Nous avons également introduit un exemple de mise en cache utilisant Gin et sync.Map.

Lorsque nous utilisons le cache, nous devons prêter attention à certains problèmes. Par exemple, nous devons régulièrement supprimer les entrées de cache expirées pour éviter un débordement de cache. Lors de l'utilisation de caches externes tels que Redis, des facteurs tels que la latence du réseau doivent également être pris en compte. En pratique, nous devons prendre en compte différents facteurs pour choisir la meilleure solution de mise en cache.

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