Redis Wert abrufen Get
- Basis‑API:
IDatabase.StringGet(key), liest String‑Daten aus Redis, Rückgabetyp istRedisValue RedisValue.HasValue:Prüft, ob der Schlüssel existiert und Daten enthälttrue:Schlüssel existiert;false:Schlüssel existiert nicht
- Nach dem Einlesen binärer Daten ist eine Deserialisierung nötig, um das Originalobjekt wiederherzustellen
- Gibt bei fehlendem Schlüssel
default(T)zurück- Werttypen(int/DateTime):gibt 0, minimale Uhrzeit zurück
- Referenztypen(class):gibt null zurück
Beispiele
using StackExchange.Redis;
using Newtonsoft.Json;
using System.Text;
/// <summary>
/// Liest zwischengespeichertes Objekt über Key
/// </summary>
/// <typeparam name="T">Zielobjekttyp</typeparam>
/// <param name="key">Cache‑Schlüsselname</param>
/// <returns>Gibt Objekt zurück bei Existenz; sonst default(T)</returns>
public T Get<T>(string key)
{
// Daten aus redis einlesen
RedisValue rValue = db.StringGet(key);
// Prüfung ob Key nicht vorhanden
if (!rValue.HasValue)
{
return default(T);
}
// Binärdaten zu Entität deserialisieren
T result = Deserialize<T>(rValue);
return result;
}
/// <summary>
/// Deserialisierung:byte[] → T‑Objekt
/// </summary>
private T Deserialize<T>(byte[] serializedObject)
{
if (serializedObject == null)
{
return default(T);
}
// Byte‑Array in Json‑String umwandeln
string json = Encoding.UTF8.GetString(serializedObject);
// Json in Ziel‑Entität umwandeln
return JsonConvert.DeserializeObject<T>(json);
}
/// <summary>
/// Objekt‑Serialisierungsmethode (passend zu Set)
/// </summary>
private byte[] Serialize(object data)
{
string json = JsonConvert.SerializeObject(data);
return Encoding.UTF8.GetBytes(json);
}Code-Sprache: C# (cs)
Hinweise
- Implizite Typumwandlung
RedisValueunterstützt die direkte implizite Umwandlung nach byte[], Sie könnenrValuedirekt anDeserialize<T>(byte[])übergeben, der Compiler wandelt automatisch um. - Gepaarter Lese‑Schreib‑Ablauf
Set‑Schreibablauf:Entität → Serialize → byte[] → Redis
Get‑Leseablauf:Redis → byte[] → Deserialize → EntitätCode-Sprache: CSS (css)
- Aufrufbeispiel
// Beispiel1: Benutzerdefinierte Entität einlesen
var user = Get<User>("user_1001");
// Beispiel2: Einfachen String einlesen
string text = Get<string>("msg");
// Beispiel3: Zahlenwert einlesen
int count = Get<int>("visit_count");Code-Sprache: C# (cs)
- Nicht übereinstimmende Serialisierungs‑/Deserialisierungstypen
Wenn SieUserspeichern, aber alsStudenteinlesen, tritt eine Json‑Deserialisierungs‑Ausnahme auf. - Leicht übersehene Nullprüfung bei default(T)
var model = Get<User>("key");
// Bei fehlendem Referenztyp ist model=null, direkter Zugriff auf model.Name löst Null‑Referenz‑Fehler aus
if(model != null)
{
}Code-Sprache: C# (cs)
- Einheitliche Kodierung
Schreiben und Lesen müssen konsistentEncoding.UTF8verwenden, sonst entstehen Zeichensalat.
Wert abrufen
Previous: Wert schreiben
Next: Existenzprüfung