1. Einführung:
Wie die meisten NoSQL-Datenbanken folgt auch Redis dem Schlüssel/Wert-Datenspeichermodell. In einigen Fällen speichert Redis Schlüssel/Werte im Speicher, um die Effizienz der Datenabfrage und Datenänderung zu verbessern. Dieser Ansatz ist jedoch nicht immer eine gute Wahl. Vor diesem Hintergrund können wir es weiter optimieren, dh versuchen, nur die Schlüsseldaten im Speicher zu behalten, um die Effizienz des Datenabrufs sicherzustellen, und die Wertedaten können in seltenen Fällen auf die Festplatte ausgelagert werden gebraucht.
In tatsächlichen Anwendungen sind nur etwa 10 % der Schlüssel relativ häufig verwendete Schlüssel, sodass Redis die verbleibenden, weniger häufig verwendeten Schlüssel und Werte über den virtuellen Speicher auf die Festplatte auslagern und diese nach dem Auslagern als Schlüssel verwenden kann oder Werte müssen gelesen werden, Redis liest sie wieder zurück in den Hauptspeicher.
2. Anwendungsszenarien:
Für die meisten Datenbanken ist es am besten, alle Daten in den Speicher zu laden, und nachfolgende Abfragevorgänge können vollständig auf dem Speicher basieren. In der Realität kommt dieses Szenario jedoch nicht häufig vor. In den meisten Fällen kann nur ein Teil der Daten in den Speicher geladen werden.
In Redis gibt es ein sehr wichtiges Konzept: Schlüssel werden im Allgemeinen nicht ausgetauscht. Wenn sich also eine große Anzahl von Schlüsseln in Ihrer Datenbank befindet und jeder Schlüssel nur einem kleinen Wert zugeordnet ist, ist dies der Fall Nicht ideal für die Verwendung des virtuellen Speichers. Wenn die Datenbank hingegen nur eine kleine Anzahl von Schlüsseln enthält, der jedem Schlüssel zugeordnete Wert jedoch sehr groß ist, eignet sich dieses Szenario perfekt für die Verwendung von virtuellem Speicher.
In tatsächlichen Anwendungen können wir Schlüssel mit vielen kleineren Werten in Schlüssel mit wenigen größeren Werten zusammenführen, damit der virtuelle Speicher eine umfassendere Rolle spielt und uns hilft, die Betriebseffizienz des Systems zu verbessern. Die wichtigste Methode besteht darin, den ursprünglichen Schlüssel/Wert-Modus in einen Hash-basierten Modus zu ändern, der es ermöglicht, dass viele ursprüngliche Schlüssel zu Attributen im Hash werden.
3. Konfiguration:
1). Fügen Sie die folgenden Konfigurationselemente in die Konfigurationsdatei ein, um dem aktuellen Redis-Server die Aktivierung der virtuellen Speicherfunktion zu ermöglichen.
vm-enabled ja
2). Legen Sie die maximale Anzahl der für Redis verfügbaren virtuellen Speicherbytes in der Konfigurationsdatei fest. Wenn die Daten im Speicher größer als dieser Wert sind, werden einige Objekte auf die Festplatte ausgelagert und der von den ausgelagerten Objekten belegte Speicher wird erst dann freigegeben, wenn der verwendete Speicher kleiner als dieser Wert ist.
vm-max-memory (bytes)
Die Austauschregel von Redis besteht darin, zu versuchen, die „ältesten“ Daten zu berücksichtigen, d. h. die Daten, die am längsten nicht verwendet wurden, werden ausgetauscht. Wenn das Alter der beiden Objekte gleich ist, werden die Daten mit dem größeren Wert zuerst ausgetauscht. Es ist zu beachten, dass Redis keine Schlüssel auf die Festplatte austauscht. Wenn also die Schlüsseldaten allein den gesamten virtuellen Speicher füllen, ist dieses Datenmodell nicht für die Verwendung des virtuellen Speichermechanismus geeignet, oder der Wert muss höher eingestellt werden. Groß, um die gesamten Keys-Daten unterzubringen. Wenn wir in tatsächlichen Anwendungen die Verwendung des virtuellen Redis-Speichers in Betracht ziehen, sollten wir Redis so viel Speicher wie möglich zuweisen, um häufiges Ein- und Auslagern zu vermeiden.
3) Legen Sie die Anzahl der Seiten und die Anzahl der von jeder Seite belegten Bytes in der Konfigurationsdatei fest. Um Daten vom Speicher auf die Festplatte zu übertragen, müssen wir eine Auslagerungsdatei verwenden. Diese Dateien haben nichts mit der Datenpersistenz zu tun und Redis löscht sie alle, bevor es beendet wird. Da die meisten Zugriffe auf Auslagerungsdateien wahlfrei erfolgen, wird empfohlen, die Auslagerungsdatei auf einer Solid-State-Festplatte zu speichern, was die Betriebseffizienz des Systems erheblich verbessern kann
vm-pages 134217728 vm-page-size 32
In der obigen Konfiguration Redis Die Auslagerungsdatei wird in VM-Seiten unterteilt. Die von jeder Seite belegten Bytes sind VM-Seitengröße. Die endgültige für Redis verfügbare Auslagerungsdateigröße beträgt dann: VM-Seiten * VM-Seitengröße. Da ein Wert auf einer oder mehreren Seiten gespeichert werden kann, eine Seite jedoch nicht mehrere Werte enthalten kann, müssen wir diese Funktion von Redis beim Festlegen der VM-Seitengröße vollständig berücksichtigen.
4). In der Redis-Konfigurationsdatei gibt es einen sehr wichtigen Konfigurationsparameter, nämlich:
vm-max-threads 4
CPU cores。如果将该值设置为0,那么Redis在与交换文件进行IO交互时,将以同步的方式执行此操作。
对于Redis而言,如果操作交换文件是以同步的方式进行,那么当某一客户端正在访问交换文件中的数据时,其它客户端如果再试图访问交换文件中的数据,该客户端的请求就将被挂起,直到之前的操作结束为止。特别是在相对较慢或较忙的磁盘上读取较大的数据值时,这种阻塞所带来的影响就更为突兀了。然而同步操作也并非一无是处,事实上,从全局执行效率视角来看,同步方式要好于异步方式,毕竟同步方式节省了线程切换、线程间同步,以及线程拉起等操作产生的额外开销。特别是当大部分频繁使用的数据都可以直接从主内存中读取时,同步方式的表现将更为优异。
如果你的现实应用恰恰相反,即有大量的换入换出操作,同时你的系统又有很多的cores,有鉴于此,你又不希望客户端在访问交换文件之前不得不阻塞一小段时间,如果确实是这样,我想异步方式可能更适合于你的系统。
至于最终选用哪种配置方式,最好的答案将来自于不断的实验和调优。
以上就是Redis教程(十一):虚拟内存介绍的内容,更多相关内容请关注PHP中文网(m.sbmmt.com)!