Maison >développement back-end >Golang >Comment utiliser la mise en cache dans Golang pour réduire la charge de la base de données ?

Comment utiliser la mise en cache dans Golang pour réduire la charge de la base de données ?

WBOY
WBOYoriginal
2023-06-21 09:44:071022parcourir

Lors du développement Web, les bases de données sont l'une des méthodes de stockage de données les plus couramment utilisées. Cependant, des opérations fréquentes sur la base de données peuvent augmenter la charge du serveur et affecter les performances du site Web. Afin de réduire la charge sur la base de données, nous devons utiliser la mise en cache. Cet article explique comment utiliser la technologie de mise en cache dans Golang pour réduire la charge sur la base de données.

  1. Qu'est-ce que le cache ?

La mise en cache est une technologie qui stocke les données en mémoire pour un accès plus rapide aux données. Les méthodes courantes d'implémentation du cache incluent le cache mémoire, le cache de fichiers, le cache Redis, etc. La mise en cache peut réduire le nombre d'accès à la base de données et améliorer la vitesse de réponse du système.

  1. Comment utiliser le cache ?

Dans Golang, vous pouvez utiliser des bibliothèques tierces pour implémenter des fonctions de mise en cache. Les bibliothèques couramment utilisées incluent Memcached, Redis, etc. Cet article utilise Redis comme exemple pour présenter l'utilisation du cache.

2.1 Installer Redis

Dans le système Ubuntu, vous pouvez utiliser la commande suivante pour installer Redis :

sudo apt-get update
sudo apt-get install redis-server

2.2 Installer la bibliothèque go-redis

go-redis est une bibliothèque client Redis pour Golang. Vous pouvez l'installer à l'aide de la commande suivante :

go get github.com/go-redis/redis/v8

2.3 Connexion à Redis

Dans Golang, la connexion à Redis nécessite d'utiliser les fonctions fournies par la bibliothèque client Redis. Vous pouvez utiliser le code suivant pour vous connecter à Redis :

import (
    "context"
    "github.com/go-redis/redis/v8"
)

func main() {
    // 创建Redis客户端实例
    rdb := redis.NewClient(&redis.Options{
        Addr:     "localhost:6379",
        Password: "", //设置Redis密码
        DB:       0,  //使用默认的DB
    })

    // 测试连接
    err := rdb.Ping(context.Background()).Err()
    if err != nil {
        panic(err)
    }

    // 关闭连接
    defer rdb.Close()
}

2.4 Utilisation du cache

Dans Golang, vous pouvez utiliser les méthodes Get et Set de Redis pour les opérations de mise en cache. Voici un exemple simple qui lit les données du cache, et si elles n'existent pas dans le cache, lit les données de la base de données et enregistre les données dans le cache : GetSet方法来进行缓存操作。以下是一个简单的示例,从缓存中读取数据,如果缓存中不存在,则从数据库中读取数据,并将数据保存到缓存中:

func GetUserInfoById(userId string) (*UserInfo, error) {
    var u *UserInfo

    // 从缓存中读取数据
    val, err := rdb.Get(context.Background(), fmt.Sprintf("user_info:%s", userId)).Result()
    if err == redis.Nil {
        // 数据不存在于缓存中,需要从数据库中读取
        u, err = db.QueryUserInfoById(userId)
        if err != nil {
            return nil, err
        }

        // 将数据保存到缓存中
        jsonBytes, _ := json.Marshal(u)
        err := rdb.Set(context.Background(), fmt.Sprintf("user_info:%s", userId), jsonBytes, time.Duration(30)*time.Minute).Err()
        if err != nil {
            log.Errorf("set user info to redis error: %v", err)
        }
    } else if err != nil {
        return nil, err
    } else {
        // 数据存在于缓存中,解析JSON
        err = json.Unmarshal([]byte(val), &u)
        if err != nil {
            return nil, err
        }
    }

    return u, nil
}

以上示例中,首先从缓存中读取数据,如果缓存中不存在,则从数据库中读取数据,并将数据保存到缓存中。在这个过程中,使用了Redis的GetSetrrreee

Dans l'exemple ci-dessus, les données sont lues depuis le cache d'abord, s'il n'existe pas dans le cache, lisez les données de la base de données et enregistrez les données dans le cache. Dans ce processus, les méthodes Get et Set de Redis sont utilisées pour effectuer des opérations de lecture et d'écriture du cache.
  1. Précautions de mise en cache

Lors de l'utilisation du cache, vous devez faire attention à certaines choses :

3.1 Cohérence des données

Étant donné que les données du cache peuvent être désynchronisées avec les données de la base de données, les opérations de lecture et d'écriture sont effectuées. Ce faisant, la cohérence des données doit être prise en compte. Par exemple, lors de la mise à jour des données dans la base de données, les données du cache doivent être mises à jour en même temps ; lors de la suppression des données dans la base de données, les données du cache doivent également être supprimées en même temps.

3.2 Délai d'expiration du cache

Étant donné que les données stockées dans le cache peuvent être obsolètes, le délai d'expiration du cache doit être défini. Le paramètre de délai d'expiration doit être ajusté en fonction des besoins de l'entreprise pour éviter que les données stockées dans le cache ne soient trop anciennes ou que le cache ne soit mis à jour trop fréquemment.

3.3 La mise à jour des données provoque une défaillance du cache

Lorsque les données de la base de données sont mises à jour, les données du cache doivent être mises à jour en même temps. Si les données du cache ne sont pas mises à jour à temps, le taux de réussite du cache diminuera, affectant ainsi les performances du système. Par conséquent, lors des opérations de mise à jour de la base de données, la stratégie de mise à jour du cache doit être prise en compte.
  1. Résumé

La mise en cache est l'une des technologies importantes permettant de réduire la charge de la base de données et d'améliorer les performances du site Web. Dans Golang, la fonction de mise en cache peut être implémentée à l'aide de bibliothèques tierces. Les bibliothèques couramment utilisées incluent Memcached, Redis, etc. Lorsque vous utilisez le cache, vous devez faire attention aux problèmes tels que la cohérence des données, le délai d'expiration du cache et l'invalidation du cache provoqués par les mises à jour des données. Dans le développement réel, les stratégies de mise en cache doivent être sélectionnées et configurées en fonction des besoins de l'entreprise afin d'optimiser les performances du système. 🎜

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