Heim >Datenbank >Redis >Prinzipielle Analyse der Redis-Einstellung von Überlebens- und Ablaufzeit

Prinzipielle Analyse der Redis-Einstellung von Überlebens- und Ablaufzeit

WBOY
WBOYnach vorne
2022-08-30 13:51:182406Durchsuche

Empfohlenes Lernen: Redis-Video-Tutorial

Bevor wir das Prinzip verstehen, schauen wir uns zunächst an, wie man es verwendet.

Mit dem EXPIRE-Befehl oder PEXPIRE-Befehl kann der Client das Überleben für einen bestimmten Schlüssel im festlegen Datenbank mit Sekunden- oder Millisekundengenauigkeit. Nach der angegebenen Anzahl von Sekunden oder Millisekunden löscht der Server automatisch Schlüssel mit einer Lebensdauer von 0.

SETEX-Befehl kann die Ablaufzeit für den Schlüssel festlegen, während ein String-Schlüssel festgelegt wird (kann nur für String-Schlüssel verwendet werden)

Ähnlich wie der EXPIRE-Befehl und der PEXPIRE-Befehl kann der Client den EXPIREAT-Befehl oder PEXPIREAT-Befehl verwenden , Legen Sie die Ablaufzeit für einen Schlüssel in der Datenbank mit einer Genauigkeit von Sekunden oder Millisekunden fest. Die Ablaufzeit ist ein UNIX-Zeitstempel. Wenn die Ablaufzeit des Schlüssels erreicht ist, löscht der Server den Schlüssel automatisch aus der Datenbank TTL-Befehl Der PTTL-Befehl akzeptiert einen Schlüssel mit einer Lebensdauer oder Ablaufzeit und gibt die verbleibende Lebensdauer des Schlüssels zurück, d. h. wie lange es dauern wird, bis der Schlüssel automatisch vom Server gelöscht wird. Redis hat vier anders Der Befehl kann verwendet werden, um die Lebensdauer des Schlüssels (wie lange der Schlüssel existieren kann) oder die Ablaufzeit (wann der Schlüssel gelöscht wird) festzulegen:

EXPIRE<key><ttl> Der Befehl wird verwendet, um die Lebensdauer von festzulegen Der Schlüssel zu TTL-Sekunden. Der Befehl

PEXPIRE<key><ttl> wird verwendet, um die Schlüssellebensdauer auf TTL-Millisekunden festzulegen. Der Befehl

EXPIREAT<key><timestamp> wird verwendet, um die Ablaufzeit des Schlüssels auf den durch timestamp angegebenen Zeitstempel in Sekunden festzulegen. Der Befehl

PEXPIREAT<key><timestamp> wird verwendet, um die Ablaufzeit des Schlüssels auf den durch timestamp angegebenen Zeitstempel in Millisekunden festzulegen.

Prinzip

Obwohl es viele verschiedene Einheiten und unterschiedliche Formen zum Festlegen von Befehlen gibt, werden die drei Befehle EXPIRE, PEXPIRE und EXPIREAT tatsächlich alle mit dem PEXPIREAT-Befehl implementiert:
  • Unabhängig davon, ob der Client die oben genannten vier ausführt Unabhängig davon, welcher Befehl konvertiert wird, ist der endgültige Ausführungseffekt derselbe wie bei der Ausführung des PEXPIREAT-Befehls.
  • Das Expires-Wörterbuch der redisDb-Struktur speichert die Ablaufzeit aller Schlüssel in der Datenbank. Wir nennen dieses Wörterbuch das Expires-Wörterbuch.
  • Der Schlüssel des Expires-Wörterbuchs ist ein Zeiger, der auf ein Schlüsselobjekt in der Datenbank zeigt Schlüsselraum (auch Das ist ein Datenbankschlüssel).

Der Wert des Ablaufwörterbuchs ist eine Ganzzahl vom Typ „Long Long“. Diese Ganzzahl speichert die Ablaufzeit des Datenbankschlüssels, auf den der Schlüssel zeigt – ein UNIX-Zeitstempel mit Millisekundengenauigkeit.

Die folgende Abbildung zeigt ein Beispiel einer Datenbank mit einem Ablaufwörterbuch. In diesem Beispiel speichert der Schlüsselraum alle Schlüssel-Wert-Paare in der Datenbank und das Ablaufwörterbuch speichert die Ablaufzeit der Datenbankschlüssel.

Zur Vereinfachung der Anzeige werden das Alphabetschlüsselobjekt und das Buchschlüsselobjekt im Schlüsselraum- und Ablaufwörterbuch in der Abbildung zweimal wiederholt. In der Praxis verweisen die Schlüssel des Schlüsselraums und die Schlüssel des Ablaufwörterbuchs auf dasselbe Schlüsselobjekt, sodass keine doppelten Objekte vorhanden sind und kein Platz verschwendet wird.

Das Ablaufwörterbuch in der Abbildung speichert zwei Schlüssel-Wert-Paare:

Der Schlüssel des ersten Schlüssel-Wert-Paares ist das Alphabet-Schlüsselobjekt, und der Wert ist 1385877600000, was bedeutet, dass die Ablaufzeit von Das Datenbankschlüsselalphabet lautet 1385877600000 (0:00 Uhr am 1. Dezember 2013).

Der Schlüssel des zweiten Schlüssel-Wert-Paares ist das Buchschlüsselobjekt und der Wert ist 1388556000000, was bedeutet, dass die Ablaufzeit des Datenbankschlüsselbuchs 1388556000000 (0:00 am 1. Januar 2014) beträgt. Wenn der Client den PEXPIREAT-Befehl (oder drei andere Befehle, die in PEXPIREAT-Befehle umgewandelt werden) ausführt, um eine Ablaufzeit für einen Datenbankschlüssel festzulegen, ordnet der Server den angegebenen Datenbankschlüssel und die Ablaufzeit im Ablaufwörterbuch der Datenbank zu.

Nachdem der Server den folgenden Befehl ausgeführt hat

Das Ablaufwörterbuch fügt ein Schlüssel-Wert-Paar hinzu, wobei der Schlüssel das Nachrichtenschlüsselobjekt ist und der Wert 1391234400000 (0:00 am 1. Februar 2014) ist, wie in der Abbildung gezeigt Es folgt der Pseudocode des PEXPIREAT-Befehls. Codedefinition

Der PERSIST-Befehl kann die Ablaufzeit eines Schlüssels entfernen

Der PERSIST-Befehl ist die umgekehrte Operation des PEXPIREAT-Befehls: Der PERSIST-Befehl sucht nach dem Geben Sie den angegebenen Schlüssel im Ablaufwörterbuch ein und geben Sie die Zuordnung von Schlüssel und Wert (Ablaufzeit) im Ablaufwörterbuch frei.

Ermittlung abgelaufener Schlüssel

Mit dem Ablaufwörterbuch kann das Programm die folgenden Schritte verwenden, um zu prüfen, ob ein bestimmter Schlüssel abgelaufen ist:

1) Überprüfen Sie, ob der angegebene Schlüssel im Ablaufwörterbuch vorhanden ist: Wenn er vorhanden ist, dann abrufen die Ablaufzeit des Schlüssels.

2) Überprüfen Sie, ob der aktuelle UNIX-Zeitstempel länger als die Ablaufzeit des Schlüssels ist: Wenn ja, dann ist der Schlüssel abgelaufen, andernfalls ist der Schlüssel nicht abgelaufen. Dieser Prozess kann mit Pseudocode beschrieben werden:

Für ein Schlüsselalphabet mit einer Ablaufzeit von 1385877600000 (0:00 Uhr am 1. Dezember 2013):

Wenn die aktuelle Zeit 1383282000000 (1. November 2013) Tag Null ist ), dann gibt der Aufruf von is_expired(alphabet) False zurück, da die aktuelle Zeit kürzer als die Ablaufzeit des Alphabetschlüssels ist.

Wenn die aktuelle Zeit hingegen 1385964000000 (0:00 Uhr am 2. Dezember 2013) ist, gibt der Aufruf von is_expired(alphabet) True zurück, da die aktuelle Zeit größer als die Ablaufzeit des Alphabetschlüssels ist.

Empfohlenes Lernen:

Redis-Video-Tutorial

Das obige ist der detaillierte Inhalt vonPrinzipielle Analyse der Redis-Einstellung von Überlebens- und Ablaufzeit. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:jb51.net. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen