Lire une valeur

Lire une valeur Redis avec Get

  1. API de bas niveau:IDatabase.StringGet(key), lit des données de type chaîne depuis Redis, retourne un objet RedisValue
  2. RedisValue.HasValue:vérifie si la clé existe et contient des données
    • true:la clé existe ;
    • false:la clé n’existe pas
  3. Après avoir récupéré les données binaires, vous devez désérialiser pour restaurer l’objet original
  4. Retourne default(T) si la clé est absente
    • Types valeur(int/DateTime):retourne 0, date‑heure minimale
    • Types référence(class):retourne null

Exemples

using StackExchange.Redis;
using Newtonsoft.Json;
using System.Text;

/// <summary>
/// Lit un objet mis en cache à partir d’une clé
/// </summary>
/// <typeparam name="T">Type de l’objet cible</typeparam>
/// <param name="key">Nom de la clé de cache</param>
/// <returns>Retourne l’objet s’il existe ; sinon retourne default(T)</returns>
public T Get<T>(string key)
{
    // Lecture des données depuis redis
    RedisValue rValue = db.StringGet(key);

    // Vérifie l’absence de la clé
    if (!rValue.HasValue)
    {
        return default(T);
    }

    // Désérialisation des données binaires en entité
    T result = Deserialize<T>(rValue);
    return result;
}

/// <summary>
/// Désérialisation:byte[] → objet T
/// </summary>
private T Deserialize<T>(byte[] serializedObject)
{
    if (serializedObject == null)
    {
        return default(T);
    }
    // Conversion tableau d’octets vers chaîne json
    string json = Encoding.UTF8.GetString(serializedObject);
    // Conversion json vers entité cible
    return JsonConvert.DeserializeObject<T>(json);
}

/// <summary>
/// Méthode de sérialisation d’objet (associée à Set)
/// </summary>
private byte[] Serialize(object data)
{
    string json = JsonConvert.SerializeObject(data);
    return Encoding.UTF8.GetBytes(json);
}Langage du code : C# (cs)

Remarques

  1. Conversion implicite de type
    RedisValue supporte la conversion implicite directe vers byte[], vous pouvez passer directement rValue dans Deserialize<T>(byte[]), le compilateur fait la conversion automatiquement.
  2. Flux lecture‑écriture associé
Flux écriture SetEntité → Serializebyte[]Redis
Flux lecture GetRedisbyte[]DeserializeEntitéLangage du code : CSS (css)
  1. Exemple d’appel
// Exemple1 : Lecture d’une entité personnalisée
var user = Get<User>("user_1001");

// Exemple2 : Lecture d’une chaîne simple
string text = Get<string>("msg");

// Exemple3 : Lecture d’une valeur numérique
int count = Get<int>("visit_count");Langage du code : C# (cs)
  1. Incompatibilité types sérialisation / désérialisation
    Si vous stockez User et tentez de le lire en tant que Student, une exception de désérialisation Json survient.
  2. Vérification null facilement oubliée avec default(T)
var model = Get<User>("key");
// model vaut null pour les types référence absents, accéder directement à model.Name provoque une exception de référence null
if(model != null)
{

}Langage du code : C# (cs)
  1. Encodage unifié
    Utilisez systématiquement Encoding.UTF8 en écriture et lecture, sinon vous obtiendrez des caractères corrompus.

Lire une valeur

Laisser un commentaire

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