Heim  >  Artikel  >  Datenbank  >  Drei Methoden der Redis-Löschstrategie und Analyse von Beispielen für Räumungsalgorithmen

Drei Methoden der Redis-Löschstrategie und Analyse von Beispielen für Räumungsalgorithmen

PHPz
PHPznach vorne
2023-06-02 13:43:341547Durchsuche

1. Vorwort

Bevor der Artikel beginnt, möchte ich Ihnen eine Frage stellen: Wenn wir den Befehl verwenden: expire key second给一个key设置过期时间,过期时间一到,这个key对应的过期数据Wird er wirklich sofort vom Server gelöscht? Die Antwort ist, dass es nicht sofort gelöscht wird. Nachdem wir diese Antwort kennen, werfen wir einen Blick darauf, wie abgelaufene Daten in Redis verarbeitet werden.

2. Dateneigenschaften in Redis

Redis ist eine Datenbank auf Speicherebene. Die Daten im Speicher können ihren Status durch TTL-Anweisungen erhalten Befehlsergebnis

Status

3. Zeitkritische Datenspeicherstruktur

Drei Methoden der Redis-Löschstrategie und Analyse von Beispielen für Räumungsalgorithmen

Wenn wir Anweisungen zum Festlegen abgelaufener Daten verwenden, wird die den Daten entsprechende Adresse im Ablaufzeitraum abgelegt. Die Speichermethode ist Hash und der gespeicherte Wert ist der Ablauf Zeit. 4. Strategie zum Löschen von Daten Serverausfall oder Speicherfehler.

1. Geplantes Löschen

    Erstellen Sie einen Timer, wenn der Schlüssel eine Ablaufzeit hat Wenn die Zeit erreicht ist, führt die Timer-Aufgabe sofort Schlüssellöschvorgänge durch. CPU-Druck Es ist sehr groß, egal wie hoch die CPU-Last zu diesem Zeitpunkt ist, sie wird die CPU belasten, was sich auf die Antwortzeit des Redis-Servers und den Befehlsdurchsatz auswirkt

    数据删除策略目标:在内存占用与CPU占用之间寻找一种平衡,顾此失彼都会造成整体redis性能的下降,甚至引发服务器宕机或内存泄露

    1、定时删除

    • 创建一个定时器,当key设置有过期时间,且过期时间到达时,由定时器任务立即执行对键的删除操作

    • 优点:节约内存,到时就删除,快速释放掉不必要的内存占用

    • 缺点:CPU压力很大,无论CPU此时负载量多高,均占用CPU,会影响redis服务器响应时间和指令吞吐量

    Drei Methoden der Redis-Löschstrategie und Analyse von Beispielen für Räumungsalgorithmen

    2、惰性删除

    • 数据到达过期时间,不做处理。等下次访问该数据时,会调用expireIfNeeded()函数来判断该数据是否过期: 如果未过期,返回数据,发现已过期,删除,返回不存在

    • 优点:节约CPU性能,发现必须删除的时候才删除

    • 缺点:内存压力很大,出现长期占用内存的数据

    Drei Methoden der Redis-Löschstrategie und Analyse von Beispielen für Räumungsalgorithmen

    3、定期删除

    Drei Methoden der Redis-Löschstrategie und Analyse von Beispielen für Räumungsalgorithmen

    流程分析:

    • Redis服务器启动初始化时,读取配置server.hz的值,默认为10

    • 然后每秒钟执行10次serverCron()方法,该方法用来检测服务器

    • serverCron()方法又会调用databasesCron()方法,该方法是用来遍历数据库的,redis默认有16个数据库,从第一个数据库开始

    • databasesCron()方法又会调用activeExpireCycle()方法,该方法会对每一个expires[*]逐一进行检测,每次执行250ms/server.hz;对某个expires[*]检测时,随机挑选W个key检测

    • 如果检测到key超时,则删除key;如果一轮中删除的key的数量>W25%,循环该过程;如果一轮中删除的key的数量≤W25%,检查下一个expires[*],0-15循环。其中W取值=ACTIVE_EXPIRE_CYCLE_LOOKUPS_PER_LOOP属性值

    • 如果activeExpireCycle()执行时间到期,下次从current_db继续向下执行

    • 参数current_db用于记录activeExpireCycle() 进入哪个expires[*] 执行

    Drei Methoden der Redis-Löschstrategie und Analyse von Beispielen für Räumungsalgorithmen

    • 总结:

    • Drei Methoden der Redis-Löschstrategie und Analyse von Beispielen für Räumungsalgorithmen
    • 2. Lazy Deletion

        Die Daten erreichen die Ablaufzeit und werden nicht verarbeitet. Beim nächsten Zugriff auf die Daten wird die Funktion expireIfNeeded() aufgerufen, um festzustellen, ob die Daten abgelaufen sind: Wenn sie nicht abgelaufen sind, geben Sie die Daten zurück, stellen Sie fest, dass sie abgelaufen sind, löschen Sie sie und zurückgeben, es existiert nicht

    Vorteile:Sparen Sie CPU-Leistung, löschen Sie nur, wenn Sie feststellen, dass es notwendig ist zu löschen
XX Zeitkritische Daten
-1 Dauerhaft gültige Daten
-2 Abgelaufene Daten oder gelöschte Daten oder undefiniert

3. Regelmäßige Löschung

Prozessanalyse:
Wenn der Redis-Server startet und initialisiert, liest den Wert der Konfiguration server.hz, der Standardwert ist 10 Dann wird die Methode serverCron() 10 Mal pro Sekunde ausgeführt, um den Server zu erkennenDie Methode serverCron() ruft wiederum die Methode databasesCron() auf. Diese Methode wird standardmäßig zum Durchlaufen der Datenbank verwendet, beginnend mit der Die erste DatenbankdatabasesCron()-Methode ruft die activeExpireCycle()-Methode auf. Diese Methode erkennt jeden expires[*] einzeln , jedes Mal 250 ms/server.hz ​​ausführen; für einen bestimmten expires[* ] Während der Erkennung zufällig W-Schlüssel zur Erkennung auswählenWenn das Schlüssel-Timeout erkannt wird, löschen Sie den Schlüssel; Wenn die Anzahl der in einer Runde gelöschten Schlüssel > W25 % ist, wird der Prozess wiederholt. Wenn in einer Runde die Anzahl der gelöschten Schlüssel expires[*], 0-15-Zyklus . Darunter ist der Wert von W = ACTIVE_EXPIRE_CYCLE_LOOKUPS_PER_LOOP-Attributwert
Nachteile:Hoher Speicherdruck, Daten das lange Zeit Speicher beansprucht, erscheint Drei Methoden zum Redis-Löschen Strategie und Analyse von Beispielen für Räumungsalgorithmen Drei Methoden der Redis-Löschstrategie und des Räumungsalgorithmus Beispielanalyse
🎜Wenn die Ausführungszeit von activeExpireCycle() abläuft, wird die Ausführung beim nächsten Mal von current_db aus fortgesetzt🎜🎜🎜🎜Der Parameter current_db wird verwendet, um aufzuzeichnen, welcher ActiveExpireCycle abläuft () tritt zur Ausführung ein🎜🎜 🎜🎜Drei Methoden der Redis-Löschstrategie und Analyse von Beispiele für Räumungsalgorithmen 🎜
    🎜🎜Zusammenfassung: Fragen Sie regelmäßig die aktuellen Daten in der Redis-Bibliothek ab, übernehmen Sie eine zufällige Extraktionsstrategie und steuern Sie den Anteil der abgelaufenen Daten Löschhäufigkeit 🎜🎜🎜🎜Der Speicherdruck ist nicht sehr hoch, kalte Daten, die lange Zeit den Speicher belegt haben, werden kontinuierlich bereinigt 🎜🎜🎜🎜 5. Vergleich der Löschstrategien 🎜🎜🎜🎜🎜Regelmäßiges Löschen 🎜🎜 Spart Speicher, keine Belegung 🎜🎜 Unabhängig davon belegen Zeiträume CPU-Ressourcen, hohe Frequenz🎜🎜Zeit gegen Speicherplatz tauschen🎜🎜🎜🎜Verzögertes Löschen🎜🎜Starke Speichernutzung🎜🎜Verzögerte Ausführung, hohe CPU-Auslastung🎜🎜Speicherplatz gegen Zeit tauschen🎜🎜🎜🎜 Regelmäßiges Löschen🎜🎜Speicher Regelmäßige zufällige Reinigung🎜🎜verbraucht feste CPU-Ressourcen pro Sekunde, um den Speicher zu erhalten🎜🎜zufällige und gezielte Stichprobenkontrollen🎜🎜🎜🎜

    6. Räumungsalgorithmus

    1. Konzepteinführung

    Was soll ich tun, wenn neue Daten in Redis eingegeben werden? Redis verwendet Speicher zum Speichern von Daten. Vor der Ausführung jedes Befehls wird freeMemoryIfNeeded() aufgerufen, um zu prüfen, ob der Speicher ausreicht. Wenn der Speicher die Mindestspeicheranforderungen für neu hinzugefügte Daten nicht erfüllt, löscht Redis vorübergehend einige Daten, um Speicherplatz für die aktuelle Anweisung freizugeben. Die Strategie zum Bereinigen von Daten wird als Eviction-Algorithmus bezeichnet. freeMemoryIfNeeded()检测内存是否充足。如果内存不满足新加入数据的最低存储要求,redis要临时删除一些数据为当前指令清理存储空间。清理数据的策略称为逐出算法。

    注意:逐出数据的过程不是100%能够清理出足够的可使用的内存空间,如果不成功则反复执行。当对所有数据尝试完毕后,如果不能达到内存清理的要求,将出现错误信息。

    Drei Methoden der Redis-Löschstrategie und Analyse von Beispielen für Räumungsalgorithmen

    2、八种配置

    检测易失数据(可能会过期的数据集server.db[i].expires

    volatile-lru 挑选最近最少使用的数据淘汰
    volatile-lfu 挑选最近使用次数最少的数据淘汰
    volatile-ttl 挑选将要过期的数据淘汰
    volatile-random 任意选择数据淘汰

    检测全库数据(所有数据集server.db[i].dict

    Hinweis: Der Prozess zum Entfernen von Daten ist nicht zu 100 % in der Lage, genügend nutzbaren Speicherplatz freizugeben. Wenn er nicht erfolgreich ist, wird er wiederholt ausgeführt. Wenn nach dem Ausprobieren aller Daten die Speicherbereinigungsanforderungen nicht erfüllt werden können, wird eine Fehlermeldung angezeigt. Erkennen Sie flüchtige Daten (Data set server.db[i].expires, die möglicherweise ablaufen)volatile-lruWählen Sie die zuletzt verwendete Dateneliminierung ausvolatile-lfuWählen Sie die zuletzt verwendeten Daten aus, die gelöscht werden sollen.
    Drei Methoden der Redis-Löschstrategie und Analyse von Beispielen für Räumungsalgorithmen 2. Acht Konfigurationen

    volatile-ttl

    Erkennen Sie die gesamten Datenbankdaten (alle Datensätze server.db[i].dict)allkeys-lruWählen Sie die zuletzt verwendeten Daten aus, die entfernt werden sollen
    🎜🎜🎜allkeys-lfu 🎜🎜Wählen Sie die am längsten verwendeten Daten für die Räumung aus. 🎜🎜🎜🎜Alle Schlüssel sind zufällig 🎜🎜 die Löschung von Daten verbieten ( redis4 .0 Standardstrategie)🎜🎜🎜🎜

Das obige ist der detaillierte Inhalt vonDrei Methoden der Redis-Löschstrategie und Analyse von Beispielen für Räumungsalgorithmen. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

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