Wert schreiben

StackExchange.Redis generisches Set / Get zum Schreiben und Lesen

  1. Interner Aufruf von IDatabase.StringSet() zum Speichern von Redis‑String‑Daten
  2. Serialisierungslogik:beliebiges Objekt → JSON‑Zeichenkette → UTF8‑Byte‑Array in Redis ablegen
  3. Deserialisierungslogik:Byte‑Array einlesen → JSON‑Zeichenkette → generisches Zielobjekt
  4. Rückgabewert:true = erfolgreich,false = fehlgeschlagen

Benötigte Namespaces

using StackExchange.Redis;
using Newtonsoft.Json;
using System.Text;Code-Sprache: CSS (css)

Das folgende Beispiel nutzt Set mit Schlüssel, Byte‑Array und Ablaufzeit.

/// <summary>
/// Schreibt einen Eintrag in den Redis‑Cache
/// </summary>
/// <param name="key">Cache‑Schlüssel</param>
/// <param name="data">Beliebiges Objekt</param>
/// <param name="cacheTime">Ablaufzeit 【Minuten】</param>
/// <returns>true erfolgreich / false fehlgeschlagen</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>
/// Objekt‑Serialisierung: object → byte[]
/// </summary>
private byte[] Serialize(object data)
{
    string json = JsonConvert.SerializeObject(data);
    return Encoding.UTF8.GetBytes(json);
}

/// <summary>
/// Cache‑Eintrag über Schlüssel auslesen
/// </summary>
/// <typeparam name="T">Zieltyp</typeparam>
/// <param name="key">Cache‑Schlüssel</param>
/// <returns>Gibt default(T) zurück, falls der Schlüssel nicht existiert</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>
/// Deserialisierung: byte[] → T‑Objekt
/// </summary>
private T Deserialize<T>(byte[] serializedObject)
{
    if (serializedObject == null)
    {
        return default(T);
    }
    string json = Encoding.UTF8.GetString(serializedObject);
    return JsonConvert.DeserializeObject<T>(json);
}Code-Sprache: PHP (php)

Hinweise

  1. Zeiteinheit
    Im Code bedeutet TimeSpan.FromMinutes(cacheTime) dass der Eingabewert in 【Minuten】 angegeben wird
    Wenn Sie im Formular Set(key,val,1000) aufrufen, läuft der Cache nach 1000 Minuten ab, nicht nach Sekunden!

Im vorherigen Formular‑Beispiel war fest 1000 hinterlegt – das ist eine häufige Fehlerquelle.
Wenn Sie Sekunden verwenden möchten, ersetzen Sie durch TimeSpan.FromSeconds(cacheTime)

  1. Abhängigkeiten installieren
    Beide NuGet‑Pakete müssen installiert sein:
  • StackExchange.Redis
  • Newtonsoft.Json
  1. Daten‑Speicherformat
    Alle Objekte werden in JSON‑Binärdaten umgewandelt und in Redis gespeichert. Im Redis‑Client sehen Sie normalen JSON‑Text.
  2. RedisValue‑Kompatibilität
    db.StringGet(key) liefert RedisValue, es kann implizit nach byte[] konvertiert und direkt an Deserialize<T> übergeben werden.
  3. Hinweis zur Thread‑Sicherheit
    IConnectionMultiplexer sollte als globales Singleton verwendet werden. Erstellen Sie nicht bei jedem Redis‑Lese‑/Schreibvorgang eine neue Verbindung.

Anwendungsbeispiel

// Schreiben (läuft nach 30 Minuten ab)
bool ok = Set("user:1001", new {Id = 1001, Name = "test"}, 30);

// Lesen
var user = Get<dynamic>("user:1001");

// Beispiel zum Einlesen einer Modell‑Klasse
// var model = Get<UserInfo>("user:1001");Code-Sprache: JavaScript (javascript)

Empfehlung

Lagern Sie diese Hilfsmethoden samt Redis‑Verbindungscode in einer separaten statischen Hilfsklasse RedisHelper.cs aus. Vermeiden Sie die Ablage im Formular‑Code, um eine saubere Trennung der Zuständigkeiten zu erreichen.

Wert schreiben

Schreibe einen Kommentar

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