Zum Hauptinhalt springen

TTL und Ablauf

Eine Time-to-Live (TTL) ist eine Dauer, die Sie an einen Key anhängen und die Clustron Zaris mitteilt, wie lange der Key existieren soll. Wenn die TTL verstrichen ist, wird der Key automatisch entfernt, sodass Sie zeitbasierte Bereinigung erhalten, ohne Bereinigungscode zu schreiben.

Was TTL bedeutet​

Die TTL definiert die Lebensdauer eines Keys. Sie legen sie beim Schreiben des Keys als Dauer fest, und sobald diese Dauer verstrichen ist, läuft der Key ab: Er wird entfernt und sein Value ist nicht mehr zugänglich. Dafür muss in Ihrer Anwendung nichts laufen — der Ablauf ist Aufgabe des Systems.

Eine TTL setzen​

Sie hängen eine TTL beim Speichern eines Values an, indem Sie mit Put.WithTtl erstellte Put-Optionen übergeben:

await client.PutAsync(
"session:abc123",
"active",
Put.WithTtl(TimeSpan.FromMinutes(10)));

Dieser Key existiert ab dem Schreibvorgang 10 Minuten lang und läuft dann von selbst ab.

Einen Key lesen, der ablaufen kann​

Ein Get auf einen ablaufenden Key sieht aus wie jeder andere Lesezugriff. Was sich ändert, ist das Ergebnis, sobald der Key verschwunden ist:

var result = await client.GetAsync<string>("session:abc123");

if (result.IsSuccess)
{
Console.WriteLine(result.Value);
}

Bevor die TTL verstrichen ist, ist IsSuccess true und Value enthält Ihre Daten. Nach dem Verstreichen ist IsSuccess false, Status ist KvStatus.NotFound, und der Key verhält sich exakt so, als hätte er nie existiert. Prüfen Sie stets IsSuccess, statt anzunehmen, dass der Key vorhanden ist, denn ein Ablauf kann zwischen zwei Lesezugriffen eintreten.

Eine TTL verlängern​

Um die TTL eines Keys an Ort und Stelle zurückzusetzen — ohne seinen Value neu zu schreiben — rufen Sie ExpireAsync mit einer neuen Dauer auf:

await client.ExpireAsync("session:abc123", TimeSpan.FromMinutes(10));

Das gibt dem Key ab dem Zeitpunkt des Aufrufs eine neue Lebensdauer von 10 Minuten und verlängert ihn damit faktisch. Auch ein erneutes Put des Keys mit Put.WithTtl setzt dessen TTL zurück, Sie können also auf beide Arten verlängern; ExpireAsync ist die leichtere Option, wenn sich der Value nicht geändert hat. Anwendungen halten kurzlebige Daten auf diese Weise am Leben — etwa durch Auffrischen der TTL einer Session bei jeder Benutzeraktion.

Zwei weitere Aufrufe runden die TTL-Verwaltung ab: PersistAsync entfernt die TTL eines Keys und macht ihn dauerhaft, und GetTimeToLiveAsync liefert die verbleibende Time-to-Live (oder null, wenn der Key keine TTL hat, und KvStatus.NotFound, wenn der Key nicht vorhanden ist).

Wann TTL einsetzen​

TTL passt zu allen Daten, die nicht ewig leben sollen und verworfen werden können, sobald sie veraltet sind. Typische Einsatzfälle sind Sessions und anderer temporärer Zustand, Caches, die sich selbst bereinigen, zeitbasierte Invalidierung und kurzlebige Ressourcenverfolgung.

Wie sich der Ablauf verhält​

Der Ablauf erfolgt automatisch und erfordert keine manuelle Bereinigung — Sie durchsuchen und löschen veraltete Keys nie selbst. Abgelaufene Keys werden im gesamten Cluster konsistent entfernt, sodass ein abgelaufener Key nicht auf manchen Nodes verbleibt und auf anderen verschwindet.

Im verteilten Modus wird die TTL über alle Nodes verwaltet und der Ablauf koordiniert, sodass jeder Client dasselbe Verhalten beobachtet. Ein abgelaufener Key wird als nicht vorhanden gelesen, unabhängig davon, mit welchem Node ein Client verbunden ist.

TTL steuert Daten, nicht Ownership​

TTL beantwortet genau eine Frage: Wie lange sollen diese Daten existieren? Sie verfolgt nicht, wer für eine Ressource verantwortlich ist. Diese Unterscheidung wird wichtig, sobald Sie vom Caching zur Koordination übergehen.

tipp

Halten Sie TTL und Leases in getrennten gedanklichen Schubladen. TTL steuert die Lebensdauer von Daten — wann ein Value verschwindet. Eine Lease steuert die Ownership einer Ressource — wer aktuell dafür verantwortlich ist — und gibt diese Ownership automatisch frei, wenn der Owner die Erneuerung einstellt. Wenn Sie „lösche das nach einer Weile“ brauchen, greifen Sie zur TTL; wenn Sie „genau einen Owner und Wiederherstellung, falls der Owner stirbt“ brauchen, greifen Sie zu einer Lease.

TTL ist Ihr erster Kontakt mit der Lebenszyklusverwaltung. Clustron Zaris erweitert die Idee um Leases, die die Existenz einer Ressource an einen Owner binden, und um Koordinationsprimitive, die auf Zustandsänderungen reagieren.

Nächste Schritte​