Kürzlich haben wir ein interessantes Problem im Redis-Cluster entdeckt. Nachdem wir viel Zeit mit Debuggen und Tests verbracht hatten, konnten wir die Redis-Speichernutzung in einigen Clustern durch die Änderung des Schlüsselablaufs um 25 % reduzieren.
Twitter betreibt intern mehrere Caching-Dienste. Einer davon wird von Redis implementiert. Unser Redis-Cluster speichert einige wichtige Twitter-Anwendungsfalldaten, wie z. B. Impressions- und Engagement-Daten, Anzahl der Werbeausgaben und Direktnachrichten.
Der Hintergrund des Problems (Empfohlenes Lernen: Redis-Video-Tutorial )
Bereits 2016 führte das Cache-Team von Twitter das durch Architektur des Redis-Clusters Viele Updates. Es gab einige Änderungen an Redis, darunter ein Update von Redis Version 2.4 auf Version 3.2. Nach diesem Update traten mehrere Probleme auf, z. B. dass Benutzer feststellen mussten, dass die Speichernutzung nicht mit dem übereinstimmte, was sie erwartet oder verwendet hatten, erhöhte Latenz und Probleme beim Löschen wichtiger Daten. Die Schlüsselfreigabe stellt ein großes Problem dar, das dazu führen kann, dass die Daten, die beibehalten werden sollen, gelöscht werden oder die Anfrage an den ursprünglichen Speicher der Daten gesendet wird.Voruntersuchung
Das betroffene Team und das Cache-Team haben eine Voruntersuchung eingeleitet. Wir sehen eine erhöhte Latenz im Zusammenhang mit der Schlüssellöschung, die jetzt stattfindet. Wenn Redis eine Schreibanforderung erhält, aber nicht über den Speicher zum Speichern des Schreibvorgangs verfügt, stoppt es seine Arbeit, löscht den Schlüssel und speichert dann den neuen Schlüssel. Wir müssen jedoch noch herausfinden, was die Ursache für diesen Anstieg der neu gelöschten Speichernutzung ist. Wir vermuten, dass der Speicher voller abgelaufener, aber noch nicht gelöschter Schlüssel ist. Einige Leute empfehlen die Verwendung des Scanverfahrens, das alle Schlüssel liest und das Löschen abgelaufener Schlüssel ermöglicht.In Redis haben Schlüssel zwei Ablaufmethoden: aktives Ablaufen und passives Ablaufen. Der Scan löst den passiven Ablauf des Schlüssels aus. Wenn der Schlüssel gelesen wird, wird die TTL überprüft. Wenn die TTL abgelaufen ist, wird die TTL gelöscht und nichts zurückgegeben.
Der aktive Ablauf von Schlüsseln in Version 3.2 wird in der Redis-Dokumentation beschrieben. Der aktive Ablauf eines Schlüssels beginnt mit einer Funktion namens activeExpireCycle. Es läuft mehrmals pro Sekunde auf einem internen Timer namens cron. Die Funktion „activeExpireCycle“ durchläuft jeden Schlüsselraum, sucht mit einem TTL-Satz nach einem zufälligen Kry und wiederholt diesen Vorgang, bis das Zeitlimit erreicht ist, wenn der prozentuale Schwellenwert für abgelaufene Kry erreicht ist. Diese Methode zum Scannen aller Krys ist effektiv und wenn der Scan abgeschlossen ist, sinkt auch die Speichernutzung. Es scheint, dass Redis Schlüssel nicht mehr effektiv ablaufen lässt. Die damalige Lösung bestand jedoch darin, die Größe des Clusters und mehr Hardware zu erhöhen, damit die Schlüssel stärker verteilt werden und mehr Speicher zur Verfügung steht. Dies ist enttäuschend, da das zuvor erwähnte Projekt zur Aktualisierung von Redis die Größe und Kosten für den Betrieb dieser Cluster reduziert, indem es sie effizienter macht. Weitere technische Artikel zum Thema Redis finden Sie in der SpalteEinführung in das Redis-Datenbanknutzungs-Tutorial, um mehr zu erfahren!
Das obige ist der detaillierte Inhalt vonExistiert der Redis-Schlüssel nach Ablauf noch?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!