Lire une valeur Redis avec Get
- API de bas niveau:
IDatabase.StringGet(key), lit des données de type chaîne depuis Redis, retourne un objetRedisValue RedisValue.HasValue:vérifie si la clé existe et contient des donnéestrue:la clé existe ;false:la clé n’existe pas
- Après avoir récupéré les données binaires, vous devez désérialiser pour restaurer l’objet original
- 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
- Conversion implicite de type
RedisValuesupporte la conversion implicite directe vers byte[], vous pouvez passer directementrValuedansDeserialize<T>(byte[]), le compilateur fait la conversion automatiquement. - Flux lecture‑écriture associé
Flux écriture Set:Entité → Serialize → byte[] → Redis
Flux lecture Get:Redis → byte[] → Deserialize → EntitéLangage du code : CSS (css)
- 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)
- Incompatibilité types sérialisation / désérialisation
Si vous stockezUseret tentez de le lire en tant queStudent, une exception de désérialisation Json survient. - 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)
- Encodage unifié
Utilisez systématiquementEncoding.UTF8en écriture et lecture, sinon vous obtiendrez des caractères corrompus.
Lire une valeur
Previous: Écrire une valeur
Next: Vérifier l’existence