Écrire une valeur

StackExchange.Redis : méthodes génériques Set / Get pour écriture et lecture

  1. L’appel sous‑jacent IDatabase.StringSet() écrit des données de type chaîne dans Redis
  2. Logique de sérialisation : objet arbitraire → chaîne JSON → tableau d’octets UTF‑8 stocké dans Redis
  3. Logique de désérialisation : lecture du tableau d’octets → chaîne JSON → objet générique cible
  4. Valeur de retour : true = réussi, false = échec

Espaces de noms à importer

using StackExchange.Redis;
using Newtonsoft.Json;
using System.Text;Langage du code : CSS (css)

L’exemple ci‑dessous utilise Set : on transmet une clé, un tableau d’octets et une durée d’expiration.

/// <summary>
/// Écrire une entrée dans le cache Redis
/// </summary>
/// <param name="key">Clé de cache</param>
/// <param name="data">Objet quelconque</param>
/// <param name="cacheTime">Durée d’expiration 【minutes】</param>
/// <returns>true réussi / false échec</returns>
private bool Set(string key, object data, int cacheTime)
{
    if (data == null)
    {
        return false;
    }
    byte[] entryBytes = Serialize(data);
    TimeSpan expiresIn = TimeSpan.FromMinutes(cacheTime);
    return db.StringSet(key, entryBytes, expiresIn);
}

/// <summary>
/// Sérialisation d’objet : object → byte[]
/// </summary>
private byte[] Serialize(object data)
{
    string json = JsonConvert.SerializeObject(data);
    return Encoding.UTF8.GetBytes(json);
}

/// <summary>
/// Lire le cache à partir d’une clé
/// </summary>
/// <typeparam name="T">Type cible</typeparam>
/// <param name="key">Clé de cache</param>
/// <returns>Retourne default(T) si la clé n’existe pas</returns>
public T Get<T>(string key)
{
    RedisValue rValue = db.StringGet(key);
    if (!rValue.HasValue)
    {
        return default(T);
    }
    T result = Deserialize<T>(rValue);
    return result;
}

/// <summary>
/// Désérialisation : byte[] → objet de type T
/// </summary>
private T Deserialize<T>(byte[] serializedObject)
{
    if (serializedObject == null)
    {
        return default(T);
    }
    string json = Encoding.UTF8.GetString(serializedObject);
    return JsonConvert.DeserializeObject<T>(json);
}Langage du code : PHP (php)

Remarques

  1. Unité de temps
    Dans le code TimeSpan.FromMinutes(cacheTime) signifie que la valeur fournie est exprimée en 【minutes】
    Si vous appelez Set(key,val,1000) depuis votre formulaire, le cache expirera au bout de 1000 minutes, pas en secondes !

L’exemple du formulaire utilisait la valeur codée en dur 1000, c’est une erreur fréquente.
Si vous voulez utiliser des secondes, remplacez‑le par TimeSpan.FromSeconds(cacheTime)

  1. Installation des dépendances
    Installez ces deux paquets NuGet :
  • StackExchange.Redis
  • Newtonsoft.Json
  1. Format de stockage des données
    Tous les objets sont sérialisés en binaire JSON et sauvegardés dans Redis ; ce que vous voyez dans un client Redis est du texte JSON standard.
  2. Compatibilité RedisValue
    db.StringGet(key) renvoie un RedisValue, qui se convertit implicitement en byte[] et peut être passé directement à Deserialize<T>.
  3. Conseil sur la sécurité des threads
    IConnectionMultiplexer doit être un singleton global. Ne créez pas une nouvelle connexion à chaque lecture‑écriture Redis.

Exemple d’utilisation

// Écrire une entrée (expire au bout de 30 minutes)
bool ok = Set("user:1001", new {Id = 1001, Name = "test"}, 30);

// Lire la valeur
var user = Get<dynamic>("user:1001");

// Exemple de lecture d’un modèle d’entité
// var model = Get<UserInfo>("user:1001");Langage du code : JavaScript (javascript)

Recommandations

Extrayez ces méthodes d’assistance et le code de connexion Redis dans une classe statique séparée RedisHelper.cs. Évitez de les placer dans le code‑behind du formulaire pour séparer les responsabilités.

Écrire une valeur

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *