Maison  >  Article  >  développement back-end  >  Comment définir la politique d'expiration du cache dans l'application Golang ?

Comment définir la politique d'expiration du cache dans l'application Golang ?

王林
王林original
2024-06-04 12:05:571102parcourir

Il existe trois façons de définir la politique d'expiration du cache dans les applications Golang : utilisez time.Duration : définissez un délai d'expiration fixe. Utiliser l'horodatage d'expiration : spécifiez explicitement l'heure d'expiration. Utilisez une politique d'expiration personnalisée : définissez de manière flexible le délai d'expiration via redis.HookFunc.

如何在 Golang 应用中设置缓存过期策略?

Comment définir la politique d'expiration du cache dans l'application Golang ?

L'utilisation de la mise en cache dans les applications Golang peut améliorer considérablement les performances. Cependant, les éléments du cache ont une durée d'existence limitée et doivent être invalidés une fois cette limite dépassée. Voici comment définir la politique d'expiration du cache dans Golang :

Utilisation de time.Duration

Le moyen le plus simple est d'utiliser le type time.Duration, qui représente un intervalle de temps. Par exemple : time.Duration 类型,它表示时间跨度。例如:

import (
    "context"
    "time"

    "github.com/go-redis/redis/v8"
)

func main() {
    ctx := context.Background()
    client := redis.NewClient(&redis.Options{
        Addr: "localhost:6379",
    })

    // 设置缓存值,过期时间为 10 分钟
    err := client.SetEX(ctx, "my-key", "my-value", 10*time.Minute).Err()
    if err != nil {
        panic(err)
    }
}

使用到期时间戳

另一种方法是使用到期时间戳,这是一种 Unix 时间戳,表示缓存项失效的时间。例如:

import (
    "context"
    "time"

    "github.com/go-redis/redis/v8"
)

func main() {
    ctx := context.Background()
    client := redis.NewClient(&redis.Options{
        Addr: "localhost:6379",
    })

    // 设置缓存值,到期时间戳为 10 分钟后的时间
    expiration := time.Now().Add(10 * time.Minute).Unix()
    err := client.Set(ctx, "my-key", "my-value", time.Duration(expiration-time.Now().Unix())*time.Second).Err()
    if err != nil {
        panic(err)
    }
}

自定义过期策略

如果你需要更复杂的过期策略,可以使用 redis.HookFunc

import (
    "context"
    "time"

    "github.com/go-redis/redis/v8"
)

func main() {
    ctx := context.Background()
    client := redis.NewClient(&redis.Options{
        Addr: "localhost:6379",
    })

    // 设置自定义过期策略
    client.AddHook(redis.AfterSetHookFunc(func(ctx context.Context, key string, value interface{}) {
        // 根据缓存项的使用情况计算到期时间
        expiration := calculateExpiration(key, value)

        // 设置到期时间戳
        client.Expire(ctx, key, time.Duration(expiration-time.Now().Unix())*time.Second)
    }))
}

Utilisez un horodatage d'expiration🎜🎜Une autre approche consiste à utiliser un horodatage d'expiration, qui est un horodatage Unix qui indique quand l'élément de cache expire. Par exemple : 🎜rrreee🎜Politique d'expiration personnalisée🎜🎜Si vous avez besoin d'une politique d'expiration plus complexe, vous pouvez utiliser redis.HookFunc. Par exemple, vous pouvez définir un délai d'expiration personnalisé en fonction de l'utilisation des éléments du cache : 🎜rrreee

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