Wert abrufen

Redis Wert abrufen Get

  1. Basis‑API:IDatabase.StringGet(key), liest String‑Daten aus Redis, Rückgabetyp ist RedisValue
  2. RedisValue.HasValue:Prüft, ob der Schlüssel existiert und Daten enthält
    • true:Schlüssel existiert;
    • false:Schlüssel existiert nicht
  3. Nach dem Einlesen binärer Daten ist eine Deserialisierung nötig, um das Originalobjekt wiederherzustellen
  4. 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

  1. Implizite Typumwandlung
    RedisValue unterstützt die direkte implizite Umwandlung nach byte[], Sie können rValue direkt an Deserialize<T>(byte[]) übergeben, der Compiler wandelt automatisch um.
  2. Gepaarter Lese‑Schreib‑Ablauf
SetSchreibablaufEntitätSerializebyte[]Redis
GetLeseablaufRedisbyte[]DeserializeEntitätCode-Sprache: CSS (css)
  1. 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)
  1. Nicht übereinstimmende Serialisierungs‑/Deserialisierungstypen
    Wenn Sie User speichern, aber als Student einlesen, tritt eine Json‑Deserialisierungs‑Ausnahme auf.
  2. 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)
  1. Einheitliche Kodierung
    Schreiben und Lesen müssen konsistent Encoding.UTF8 verwenden, sonst entstehen Zeichensalat.

Wert abrufen

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert