Wissenspunkte dieses Artikels
Konzept abgelaufener Daten
Datenlöschstrategie
Räumungsalgorithmus
Schauen wir uns zunächst die drei Schlüsselwerte an, nämlich Geschlecht, Name und Alter.
Die Anweisungen zum Einstellen dieser drei Werte sind set name kaka setex age 100 24 setex sex 10 1
In Redis können wir ttl verwenden, um den Status eines bestimmten Schlüssels abzurufen. Verwenden wir ttl
, um den Status von Name, Alter und Geschlecht abzurufen
Sie können drei Werte sehen, die -1 775 -2 sind
Welche Informationen geben diese drei Werte?
setex age 1000 24
, ausgedrückt als Verbleibend Gültigkeitszeit Geplantes Löschen besteht darin, einen Timer zu schreiben. Wenn die Schlüsselzeit abläuft, löscht die Timer-Aufgabe den abgelaufenen Schlüssel sofort
Vorteile: Sie können sich vorstellen, dass der Schlüssel gelöscht wird, wenn er abläuft. Es ist definitiv am speicherfreundlichsten und spart Speicher
Nachteile: Die Single-Threaded-Funktion von Redis besteht darin, dass alle Befehle in einer bestimmten Reihenfolge ausgeführt werden. Wenn der Schlüsselwert nach Ablauf gelöscht wird, wird die CPU stärker belastet, was sich direkt auf die Reaktionszeit und die E/A des Redis-Servers auswirkt.
Geplantes Löschen bedeutet, dass Zeit im Austausch gegen Speicherplatz verwendet wird
Nach Abschluss des geplanten Löschvorgangs werden die dem Schlüsselwert entsprechenden Daten gelöscht und der abgelaufene Speicherbereich wird ebenfalls direkt gelöscht.
Probieren Sie es aus Dieses Bild wird nicht direkt gelöscht, wenn der Schlüsselwert abläuft. Wann wird es gelöscht? Lesen Sie weiter unten
Wenn wir das verzögerte Löschen verwenden, werden die Daten nach Ablauf nicht automatisch gelöscht. Daher lautet die Löschmethode: Wenn der Schlüsselwert das nächste Mal abgerufen wird, wird festgestellt, ob der Schlüssel abgelaufen ist. Wenn er abgelaufen ist, wird er gelöscht.
Das heißt, wenn get name erneut ausgeführt wird, wird eine Funktion ausgeführt expirelfNeeded()
Diese Funktion dient dazu, festzustellen, ob der Schlüssel abgelaufen ist. Abgelaufene geben Null zurück und löschen sie dann aus dem Speicher
Vorteile: Dadurch wird ein bestimmter Betrag reduziert der CPU-Leistung. Es wird nur gelöscht, wenn es notwendig ist,
zu löschen. Nachteile: Es muss sein, dass der Speicherdruck hoch ist, z Wenn der Hotspot vorbei ist, wird fast niemand darauf zugreifen. Dieser Schlüssel bleibt immer bestehen, wenn niemand darauf zugreift, und er wird für eine lange Zeit einen bestimmten Speicherplatz belegen
Mit anderen Worten, diese Methode besteht darin, Raum gegen Zeit zu tauschen
Wir haben oben zwei Löschmethoden erwähnt, eine ist das geplante Löschen und die andere ist das verzögerte Löschen. Eine besteht darin, Raum gegen Zeit einzutauschen. Eine besteht darin, Zeit gegen Raum einzutauschen. Bei beiden Optionen handelt es sich um relativ extreme Ansätze. Dann werfen wir einen Blick auf den Umsetzungsplan für die regelmäßige Löschung.
Werfen wir zunächst einen Blick auf den Speicherplatz von Redis. Es gibt standardmäßig 16. In redis.conf gibt es eine Konfigurationsparameterdatenbank, die durch diesen Parameter gesteuert wird. Jede Datenbank verfügt über eine eigene Ablaufpartition, in der die Datenadresse und die Datenablaufzeit gespeichert sind.
Implementierungsmethode
Redis startet Wenn der Wert von Hz unter dem Server gelesen wird, ist der Standardwert 10. Dieser Wert kann mit info server
bis
Dann wird der Server Hz-mal pro Sekunde für die serverCron()-Abfrage ausgeführt
Verwendung fortsetzen DatenbankenCron, um nacheinander auf die Informationen von 16 Redis-Bibliotheken zuzugreifen
Während des Zugriffs wird activeExpireCycel ausgeführt, um die einzelnen Abläufe[*] einzeln zu erkennen Die Ausführung beträgt Der Parameter 250 ms/Server-Hz
Beim Testen jedes Ablaufs[*] nacheinander wird ACTIVE_EXPIRE_CYCLE_SLOW_TIME_PERC zufällig zum Testen ausgewählt
Jetzt kommt also das Problem, Unsere 250 ms/Hz wurden zu diesem Zeitpunkt ausgeführt, aber was soll ich tun, wenn die 16 Datenbanken mit Ablaufdatum noch nicht durchlaufen wurden? In welche Bibliothek werde ich das nächste Mal radeln? Tatsächlich existiert dieser Wert, es ist der Wert von current_db. Dieser Wert zeichnet „activeExpireCycel“ auf und führt ihn aus, wenn Sie das nächste Mal „expires[*]
“ eingeben
Funktion 1: Keine hohen Spitzen bei der CPU-Auslastung, benutzerdefinierte Einstellungen für die Erkennungshäufigkeit
Funktion 2 : Der Speicherdruck wird nicht sehr hoch sein und der über einen längeren Zeitraum belegte Speicher wird kontinuierlich bereinigt
Wir haben oben drei Löschstrategien erwähnt, aber diese drei Strategien sind nur relativ zum Schlüssel mit festgelegter Gültigkeitsdauer wirksam.
Da unser Redis nun nicht mehr genügend Speicher verwendet, verwenden wir die Räumungsrichtlinie, um die normale Verwendung von Redis sicherzustellen.
Redis ruft freeMemorylfNeeded() auf, um zu prüfen, ob der Speicher ausreicht, bevor jeder Befehl ausgeführt wird. Wenn dieser nicht ausreicht, werden einige Schlüssel gelöscht wird Räumungsrichtlinie genannt.
Der Parameter des maximal nutzbaren Speichers von Redis ist: maxmemory. Der Standardwert ist 0. Er bezieht sich auf den Anteil des belegten physischen Speichers. ist genug.
Wählen Sie die Anzahl der Schlüssel aus, die jedes Mal gelöscht werden sollen: maxmemory-samples
Löschrichtlinie: maxmemory-policy
Konzentrieren wir uns auf die Löschstrategie
Das Obige ist die Löschstrategie und Räumungsstrategie von Redis für Daten .
Hier ist zu beachten, dass sich flüchtige Daten in der Räumungsrichtlinie auf den Schlüssel mit festgelegter Ablaufzeit beziehen und kein dauerhafter Wert sind.
Die gesamte Datenbank bezieht sich auf alle Werte, mit Ablaufzeit und permanentem Datensatz.
Das obige ist der detaillierte Inhalt vonRedis-Löschrichtlinie und Räumungsrichtlinie. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!