Heim > Artikel > Backend-Entwicklung > Die häufigsten Interviewfragen in Redis
Während des PHP-Programmiererinterviews stoßen wir möglicherweise auch auf Interviewfragen zu Redis. Dieser Artikel teilt Ihnen hauptsächlich die häufigsten Interviewfragen in Redis mit und hofft, allen zu helfen.
Besondere Empfehlung: Fragen zum Redis-Interview 2020 (aktuell)
2. Eigenschaften von Reids
Redis ist im Wesentlichen eine In-Memory-Datenbank vom Typ Schlüsselwert, ähnlich wie Memcached. Die gesamte Datenbank wird für den Betrieb in den Speicher geladen und die Datenbankdaten werden regelmäßig durch asynchrone Vorgänge zur Speicherung auf die Festplatte geleert. Da es sich um eine reine Speicheroperation handelt, ist die Leistung von Redis sehr gut. Es kann mehr als 100.000 Lese- und Schreibvorgänge pro Sekunde verarbeiten und ist damit die schnellste bekannte Schlüsselwert-Datenbank.
Die Exzellenz von Redis liegt nicht nur in seiner Leistung, sondern auch darin, dass es das Speichern einer Vielzahl von Datenstrukturen unterstützt, im Gegensatz zu Memcached Redis kann nur 1 MB Daten speichern. Es wird zum Implementieren vieler nützlicher Funktionen verwendet, z. B. zum Erstellen einer doppelt verknüpften FIFO-Liste mit seiner Liste, zum Implementieren eines leichten, leistungsstarken Nachrichtenwarteschlangendienstes und zum Erstellen eines Hochleistungs-Nachrichtenwarteschlangendienstes mit seinem Set Tag-System usw. Darüber hinaus kann Redis auch die Ablaufzeit für den gespeicherten Schlüsselwert festlegen, sodass es auch als erweiterte Version von Memcached verwendet werden kann.
Der Hauptnachteil von Redis besteht darin, dass die Datenbankkapazität durch den physischen Speicher begrenzt ist und nicht zum leistungsstarken Lesen und Schreiben großer Datenmengen verwendet werden kann. Daher sind die für Redis geeigneten Szenarien hauptsächlich auf hohe Leistung beschränkt Operationen und Berechnungen kleinerer Datenmengen.
3. Welche Vorteile bietet die Verwendung von Redis?
(1) Es ist schnell, weil die Daten im Speicher gespeichert werden, ähnlich wie bei HashMap. Der Vorteil von HashMap besteht darin, dass die zeitliche Komplexität von Suche und Betrieb O(1) ist.
(2) Es unterstützt Reichhaltige Datentypen, Unterstützt String, Liste, Set, Sortierte Menge, Hash (3) Unterstützt Transaktionen, Operationen sind atomar. Die sogenannte Atomizität bedeutet, dass alle Änderungen an den Daten entweder ausgeführt werden oder überhaupt nicht ausgeführt werden
(4) Umfangreiche Funktionen: Kann für Cache und Nachrichten verwendet werden, legt die Ablaufzeit per Schlüssel fest und wird nach Ablauf automatisch gelöscht
(1) Alle Werte in Memcached sind einfache Zeichenfolgen, und Redis unterstützt als Ersatz umfangreichere Datentypen
(2) Redis ist viel schneller als Memcached (3) Redis seine Daten beibehalten1). Speichermethode Memecache speichert alle Daten im Speicher. Nach einem Stromausfall bleiben die Daten hängen. Ein Teil von Redis wird auf der Festplatte gespeichert, was die Datenpersistenz gewährleistet.
2) Datenunterstützungstypen Memcache unterstützt relativ einfache Datentypen. Redis verfügt über komplexe Datentypen. 3) Die zugrunde liegenden Modelle sind unterschiedlich. Ihre zugrunde liegenden Implementierungsmethoden und Anwendungsprotokolle für die Kommunikation mit Clients sind unterschiedlich. Redis hat direkt einen eigenen VM-Mechanismus erstellt, denn wenn das allgemeine System Systemfunktionen aufruft, verschwendet es eine gewisse Zeit für das Verschieben und Anfordern.
1).Master schreibt einen Speicher-Snapshot und der Speicherbefehl plant die rdbSave-Funktion, die den blockiert Wenn der Snapshot relativ groß ist, ist die Auswirkung auf die Leistung sehr groß und der Dienst wird zeitweise angehalten. Daher ist es am besten, wenn der Master keine Speicher-Snapshots schreibt.
2) Wenn die AOF-Datei nicht neu geschrieben wird, hat diese Persistenzmethode den geringsten Einfluss auf die Leistung, aber die AOF-Datei wächst weiter wirkt sich auf die Wiederherstellung der Master-Neustartgeschwindigkeit aus. Es ist am besten, keine Persistenzarbeiten auf dem Master durchzuführen, einschließlich Speicher-Snapshots und AOF-Protokolldateien. Aktivieren Sie insbesondere keine Speicher-Snapshots für die Persistenz. Die Strategie besteht darin, AOF-Sicherungsdaten zu aktivieren Aktivieren Sie die AOF-Datensicherung jedes Mal. Synchronisieren Sie sie einmal pro Sekunde.
3) Der Master ruft BGREWRITEAOF auf, um die AOF-Datei neu zu schreiben. Während des Neuschreibens belegt AOF eine große Menge an CPU- und Speicherressourcen, was zu einer übermäßigen Dienstlast und einer kurzfristigen Dienstunterbrechung führt.
4). Leistungsprobleme der Redis-Master-Slave-Replikation und die Stabilität der Verbindung, wenn sich Slave und Master im selben LAN befinden
7. Es gibt 20 Millionen Daten in MySQL, aber nur 200.000 Daten werden in Redis gespeichert. So stellen Sie sicher, dass es sich bei den Daten in Redis um heiße Daten handeltRelevantes Wissen: Wenn die Größe des Redis-Speicherdatensatzes eine bestimmte Größe erreicht, wird eine Dateneliminierungsstrategie (Recyclingstrategie) implementiert. redis bietet 6 Dateneliminierungsstrategien:
volatile-lru: Wählen Sie die zuletzt verwendeten Daten aus dem Datensatz (server.db[i].expires) mit einer für die Eliminierung festgelegten Ablaufzeit aus .
volatile-ttl: Wählen Sie die Daten aus, die aus dem Datensatz (server.db[i].expires) ablaufen sollen, für den die Ablaufzeit festgelegt wurde, um
volatile-random: Wählen Sie zufällig Daten zur Eliminierung aus dem Datensatz (server.db[i].expires) mit einer festgelegten Ablaufzeit aus
allkeys-lru: Aus dem Datensatz ( Wählen Sie die zuletzt verwendeten Daten aus server.db[i].dict aus), um
allkeys-random zu entfernen: Wählen Sie Daten willkürlich aus dem Datensatz (server.db.db) aus [i].dict) Eliminieren
No-Enviction (Räumung): Räumung von Daten verbieten
8. Bitte verwenden Sie Redis und jede beliebige Sprache zur Implementierung eines böswilligen Login-geschützten Codes, begrenzt jede Benutzer-ID auf maximal 5 Logins innerhalb einer Stunde. Für bestimmte Anmeldefunktionen oder Funktionen verwenden Sie einfach eine leere Funktion und müssen diese nicht im Detail aufschreiben.
Verwenden Sie eine Liste zur Implementierung: Jedes Element in der Liste stellt die Anmeldezeit dar. Solange der Unterschied zwischen der letzten 5. Anmeldezeit und der aktuellen Zeit nicht mehr als 1 Stunde beträgt, ist die Anmeldung verboten in Python geschrieben ist wie folgt:
#!/usr/bin/env python3 import redis import sys import time r = redis.StrictRedis(host=’127.0.0.1′, port=6379, db=0) try: id = sys.argv[1] except: print(‘input argument error’) sys.exit(0) if r.llen(id) >= 5 and time.time() – float(r.lindex(id, 4)) <= 3600: print(“you are forbidden logining”) else: print(‘you are allowed to login’) r.lpush(id, time.time()) # login_func()
9. Warum muss Redis alle Daten im Speicher ablegen
Um das schnellste zu erreichen? Mit der Lese- und Schreibgeschwindigkeit liest Redis alle Daten in den Speicher und schreibt Daten asynchron auf die Festplatte. Redis zeichnet sich also durch hohe Geschwindigkeit und Datenpersistenz aus. Wenn die Daten nicht im Speicher abgelegt werden, beeinträchtigt die E/A-Geschwindigkeit der Festplatte die Leistung von Redis erheblich. Heutzutage, da Speicher immer billiger wird, wird Redis immer beliebter.
Wenn der maximal genutzte Speicher eingestellt ist, können keine neuen Werte eingefügt werden, nachdem die Anzahl der Datensätze das Speicherlimit erreicht hat.
10.Redis ist Single-Process und Single-Threaded
Redis verwendet Warteschlangentechnologie, um gleichzeitigen Zugriff in seriellen Zugriff umzuwandeln, wodurch der Overhead der herkömmlichen seriellen Datenbanksteuerung entfällt
11. Wie kann das Problem der Parallelitätskonkurrenz von Redis gelöst werden?
Redis ist ein Einzelprozess-Single-Thread-Modus, der den Warteschlangenmodus verwendet, um gleichzeitigen Zugriff in seriellen Zugriff umzuwandeln . Redis selbst hat kein Sperrkonzept. Wenn der Jedis-Client jedoch gleichzeitig auf Redis zugreift, kann es zu Problemen wie Verbindungs-Timeout, Datenkonvertierungsfehlern und dem Schließen der Verbindung kommen werden alle durch
aufgrund einer Client-Verbindungsverwirrung verursacht. Hierfür gibt es zwei Lösungen:
1. Um sicherzustellen, dass jeder Client auf normale und ordnungsgemäße Weise mit Redis kommuniziert, werden aus Sicht des Clients die Verbindung und gleichzeitig der Client gepoolt liest und schreibt Redis-Vorgänge. Die interne Sperre ist synchronisiert.
2. Aus Serversicht verwenden Sie setnx, um das Sperren zu implementieren.
Hinweis: Für den ersten Typ muss die Anwendung die Synchronisierung von Ressourcen selbst durchführen. Die verwendbaren Methoden sind relativ häufig. Für den zweiten Typ ist die Verwendung des Befehls setnx erforderlich Redis, aber es gibt einige Probleme, die beachtet werden müssen.
12. CAS (Check-and-Set-Operation zur Implementierung optimistischer Sperren) in Redis verstehen?
Wie viele andere Datenbanken bietet Redis auch einen NoSQL-Datenbanktransaktionsmechanismus . In Redis sind die vier Befehle MULTI/EXEC/DISCARD/WATCH der Eckpfeiler unserer Transaktionsimplementierung. Ich glaube, dass dieses Konzept Entwicklern mit Erfahrung in der relationalen Datenbankentwicklung nicht unbekannt ist. Dennoch werden wir die Implementierungsmerkmale von
-Transaktionen in Redis kurz auflisten:
1). Während der Ausführung der Transaktion stellt Redis keine Dienste mehr für andere Clientanforderungen bereit und stellt so sicher, dass alle Befehle in der Transaktion atomar ausgeführt werden. 2) Im Vergleich zu Transaktionen in relationalen Datenbanken werden nachfolgende Befehle weiterhin ausgeführt, wenn in einer Redis-Transaktion ein Befehl fehlschlägt.
3) Wir können eine Transaktion über den MULTI-Befehl starten, den Personen mit Erfahrung in der relationalen Datenbankentwicklung als „BEGIN TRANSACTION“-Anweisung verstehen können. Die nach dieser Anweisung ausgeführten Befehle werden als Vorgänge innerhalb der Transaktion betrachtet. Schließlich können wir alle Vorgänge innerhalb der Transaktion festschreiben/zurücksetzen, indem wir den Befehl EXEC/DISCARD ausführen. Diese beiden
Ein Redis-Befehl kann als Äquivalent zur COMMIT/ROLLBACK-Anweisung in einer relationalen Datenbank betrachtet werden.
4) Wenn vor dem Start der Transaktion ein Kommunikationsfehler zwischen dem Client und dem Server auftritt und die Netzwerkverbindung unterbrochen wird, werden alle nachfolgend auszuführenden Anweisungen nicht vom Server ausgeführt. Wenn jedoch das Netzwerkunterbrechungsereignis auftritt, nachdem der Client den EXEC-Befehl ausgeführt hat, werden alle Befehle in der Transaktion vom Server ausgeführt.
5) Bei Verwendung des Append-Only-Modus schreibt Redis in diesem Aufruf alle Schreibvorgänge in der Transaktion auf die Festplatte, indem es die Systemfunktion write aufruft. Kommt es jedoch während des Schreibvorgangs zu einem Systemabsturz, beispielsweise bei einem Ausfall durch einen Stromausfall, kann es sein, dass zu diesem Zeitpunkt nur ein Teil der Daten auf die Festplatte geschrieben wird, während ein anderer Teil der Daten verloren geht.
Der Redis-Server führt beim Neustart eine Reihe notwendiger Konsistenzprüfungen durch. Sobald ein ähnliches Problem gefunden wird, wird er sofort beendet und gibt eine entsprechende Fehlermeldung aus. Zu diesem Zeitpunkt müssen wir das im Redis-Toolkit bereitgestellte Tool redis-check-aof vollständig nutzen. Dieses Tool kann uns dabei helfen, Dateninkonsistenzfehler zu lokalisieren und einen Teil der geschriebenen Daten zurückzugeben. Nach der Reparatur können wir den Redis-Server erneut neu starten.
13.WATCH-Befehl und CAS-basiertes optimistisches Sperren:In Redis-Transaktionen kann der WATCH-Befehl verwendet werden, um CAS-Funktionalität (Check-and-Set) bereitzustellen . Gehen Sie davon aus, dass wir mehrere Schlüssel über den WATCH-Befehl überwachen, bevor die Transaktion ausgeführt wird. Wenn sich der Wert eines Schlüssels nach WATCH ändert, wird die durch den EXEC-Befehl ausgeführte Transaktion abgebrochen und eine Null-Multi-Bulk-Antwort zurückgegeben, um den Aufrufer zu benachrichtigen der Transaktion.
Ausführung fehlgeschlagen. Wir gehen beispielsweise erneut davon aus, dass der Befehl incr in Redis nicht bereitgestellt wird, um die atomare Inkrementierung von Schlüsselwerten abzuschließen. Wenn wir diese Funktion implementieren möchten, können wir nur den entsprechenden Code selbst schreiben. Der Pseudocode lautet wie folgt:
val = GET mykey val = val + 1
SET mykey $val
Der obige Code kann nur garantieren, dass das Ausführungsergebnis im Einzelfall korrekt ist Verbindung, denn wenn mehrere Clients diesen Code gleichzeitig ausführen, tritt ein Fehlerszenario auf, das häufig in Multithread-Programmen auftritt – eine Race Condition. Beispielsweise lesen beide Clients A und B gleichzeitig den ursprünglichen Wert von mykey. Danach addieren beide Clients eins zum Wert und setzen ihn auf den Redis-Server zurück von mykey geht verloren. Das Ergebnis ist 11, nicht 12, wie wir dachten. Um ähnliche Probleme zu lösen, benötigen wir die Hilfe des WATCH-Befehls, siehe folgenden Code:
WATCH mykey
val = GET mykey
val = val + 1
MULTI
SET mykey $val
EXEC
Anders als der vorherige Code überwacht der neue Code den Schlüssel über den WATCH-Befehl, bevor er den Wert von mykey erhält, und umgibt dann den Set-Befehl in der Transaktion, wodurch effektiv sichergestellt werden kann, dass jede Verbindung besteht Wenn vor der Ausführung von EXEC der von der aktuellen Verbindung erhaltene Wert von mykey von einem anderen verbundenen Client geändert wird, kann der EXEC-Befehl der aktuellen Verbindung nicht ausgeführt werden. Auf diese Weise kann der Anrufer nach Beurteilung des Rückgabewerts feststellen, ob val erfolgreich zurückgesetzt wurde.
1. Standardmäßig speichert Redis Daten-Snapshots auf der Festplatte. Der Dateiname lautet dump .rdb. Sie können die Persistenzstrategie von Redis konfigurieren. Wenn der Datensatz beispielsweise alle N Sekunden mehr als M aktualisiert, werden die Daten auf die Festplatte geschrieben, oder Sie können den Befehl SAVE oder BGSAVE manuell aufrufen.
Funktionsprinzip. Redis-Gabeln.
. Der untergeordnete Prozess beginnt, Daten in die temporäre RDB-Datei zu schreiben.
. Wenn der untergeordnete Prozess mit dem Schreiben der RDB-Datei fertig ist, ersetzen Sie die alte Datei durch die neue Datei.
. Mit dieser Methode kann Redis die Copy-on-Write-Technologie verwenden.
2. AOF
Der Snapshot-Modus ist nicht sehr robust. Wenn das System stoppt oder Redis versehentlich getötet wird, gehen die zuletzt auf Redis geschriebenen Daten verloren. Für einige Anwendungen stellt dies möglicherweise kein großes Problem dar, aber für Anwendungen, die eine hohe Zuverlässigkeit erfordern, ist
Redis keine geeignete Wahl.
Der Modus „Nur Datei anhängen“ ist eine weitere Option.
Sie können den AOF-Modus in der Konfigurationsdatei aktivieren
3. Virtueller Speichermodus
Wenn Ihr Schlüssel klein und der Wert groß ist, ist die Wirkung der Verwendung von VM besser, da dadurch Speicher gespart wird Der Weg ist relativ groß. .
Wenn Ihr Schlüssel nicht klein ist, können Sie einige außergewöhnliche Methoden in Betracht ziehen, um einen großen Schlüssel in einen großen Wert umzuwandeln
vm-max Der Parameter -threads kann die Anzahl der Threads festlegen, die auf die Auslagerungsdatei zugreifen. Es ist am besten, die Anzahl der Kerne der Maschine nicht zu überschreiten. Wenn er auf 0 gesetzt ist, werden alle Vorgänge in der Auslagerungsdatei ausgeführt seriell. Dies kann zu einer langen Verzögerung führen, es gibt jedoch eine gute Garantie für die Datenintegrität.
Als ich es selbst getestet habe, stellte ich fest, dass die Leistung bei der Verwendung des virtuellen Speichers ebenfalls gut ist. Wenn die Datenmenge groß ist, können Sie verteilte oder andere Datenbanken
15 in Betracht ziehen müssen regelmäßig bereinigt und ungültig gemacht werden. Daten erfordern eine Strategie zur Invalidierung und Eliminierung von Primärschlüsseln. In Redis werden Schlüssel mit einer Lebensdauer als flüchtig bezeichnet. Legen Sie beim Erstellen eines Caches die Lebensdauer für einen bestimmten Schlüssel fest. Wenn der Schlüssel abläuft (die Lebensdauer ist 0), kann er gelöscht werden.
1. Einige Vorgänge, die sich auf die Überlebenszeit auswirken Die Überlebenszeit kann entfernt werden, indem der DEL-Befehl zum Löschen des gesamten Schlüssels verwendet wird, oder die Originaldaten können mit den Befehlen SET und GETSET überschrieben, also geändert werden Der Wert und der Wert, die dem Schlüssel entsprechen, sind unterschiedlich. Nach dem Überschreiben mit demselben Schlüssel und Wert ist die Überlebenszeit der aktuellen Daten unterschiedlich.
Wenn Sie beispielsweise den INCR-Befehl für einen Schlüssel ausführen, den LPUSH-Befehl für eine Liste ausführen oder den HSET-Befehl für eine Hash-Tabelle ausführen, ändern diese Vorgänge nicht die Überlebenszeit des Schlüssels selbst. Wenn Sie andererseits RENAME zum Umbenennen eines Schlüssels verwenden, ist die Überlebenszeit des umbenannten Schlüssels dieselbe wie vor der Umbenennung.
Eine andere Möglichkeit des RENAME-Befehls besteht darin, zu versuchen, einen Schlüssel mit einer Überlebenszeit in einen anderen_Schlüssel mit einer Überlebenszeit umzubenennen. Zu diesem Zeitpunkt wird der alte another_key (und seine Überlebenszeit) gelöscht und dann der alte Schlüssel wird in another_key umbenannt. Daher ist die Überlebenszeit des neuen another_key dieselbe wie die des ursprünglichen Schlüssels. Verwenden Sie den Befehl PERSIST, um die Lebensdauer des Schlüssels zu entfernen, ohne den Schlüssel zu löschen, wodurch der Schlüssel wieder zu einem dauerhaften Schlüssel wird.
2. So aktualisieren Sie die Überlebenszeit
Sie können den EXPIRE-Befehl auf einem Schlüssel ausführen, der bereits eine Überlebenszeit hat, und die neu angegebene Überlebenszeit ersetzt die alte Überlebenszeit. Die Genauigkeit der Ablaufzeit wurde innerhalb von 1 ms kontrolliert und die Zeitkomplexität des Primärschlüsselfehlers beträgt O(1). Mit den Befehlen EXPIRE und TTL können Sie die aktuelle Überlebenszeit des Schlüssels anzeigen. Gibt 1 zurück, wenn die Einstellung erfolgreich ist; gibt 0 zurück, wenn der Schlüssel nicht existiert oder die Überlebenszeit für den Schlüssel nicht festgelegt werden kann.
Maximale Cache-Konfiguration
In Redis dürfen Benutzer die maximale Speichergröße festlegen
server.maxmemory
Der Standardwert ist 0 und der maximale Cache wird nicht angegeben, wenn neue Daten hinzugefügt werden und diese überschreiten Wenn der maximale Speicher erreicht ist, stürzt Redis ab und muss daher festgelegt werden. Wenn die Größe des Redis-Speicherdatensatzes eine bestimmte Größe erreicht, wird die Dateneliminierungsstrategie implementiert.
Redis bietet 6 Strategien zur Dateneliminierung:
. volatile-lru: Wählen Sie die zuletzt verwendeten Daten aus dem Datensatz (server.db[i].expires) mit einer Ablaufzeit aus, um
zu eliminieren. volatile-ttl: Wählen Sie die Daten aus dem Datensatz (server.db[i].expires) aus, die demnächst ablaufen, mit einer Ablaufzeit, die gelöscht werden soll
. volatile-random: Wählen Sie zufällig Daten aus, die aus dem Datensatz (server.db[i].expires) entfernt werden sollen, mit einer festgelegten Ablaufzeit
. allkeys-lru: Wählen Sie die zuletzt verwendeten Daten aus dem Datensatz (server.db[i].dict) aus, um
. zu entfernen. allkeys-random: Daten willkürlich auswählen, die aus dem Datensatz entfernt werden sollen (server.db[i].dict)
. no-enviction (Räumung): Verbieten Sie die Räumung von Daten.
Beachten Sie die 6 Mechanismen, mit denen angegeben wird, ob Daten aus dem Datensatz mit einer Ablaufzeit oder aus allen Datensätzen entfernt werden sollen und Random besteht aus drei verschiedenen Eliminierungsstrategien sowie einer No-Enviction-Strategie, die niemals recycelt wird.
Richtlinienregeln verwenden:
1. Wenn die Daten eine Potenzgesetzverteilung aufweisen, d Die Daten weisen ebenfalls eine Gleichverteilung auf. Das heißt, alle Datenzugriffshäufigkeiten sind gleich. Verwenden Sie dann Allkeys-Random.
Drei Dateneliminierungsstrategien:
TTL und Random sind leichter zu verstehen und die Implementierung wird einfacher. Der Hauptgrund ist, dass Lru die Eliminierungsstrategie zumindest vor Kurzem verwendet hat. Das Design sortiert die Schlüssel nach der Ablaufzeit und nimmt dann den ersten ungültigen Schlüssel, um ihn zu eliminieren.
Am häufigsten geeignetes Szenario für Redis
Wenn Sie einfach die Unterschiede zwischen Redis und Memcached vergleichen, Die meisten Leute werden die folgenden Meinungen bekommen: 1. Redis unterstützt nicht nur einfache Daten vom Typ k/v, sondern bietet auch die Speicherung von Datenstrukturen wie Liste, Menge, Zset und Hash. 2. Redis unterstützt die Datensicherung, also die Datensicherung im Master-Slave-Modus.
3. Redis unterstützt Datenpersistenz, wodurch Daten im Speicher auf der Festplatte verbleiben und zur Verwendung beim Neustart erneut geladen werden können.(1), Sitzungscache
Eines der am häufigsten verwendeten Szenarien für die Verwendung von Redis ist der Sitzungscache. Der Vorteil der Verwendung von Redis zum Zwischenspeichern von Sitzungen gegenüber anderem Speicher (z. B. Memcached) besteht darin, dass Redis Persistenz bietet. Bei der Pflege eines Caches, für den keine unbedingte Konsistenz erforderlich ist, sind die meisten Benutzer unzufrieden, wenn alle Warenkorbinformationen des Benutzers verloren gehen.
Werden sie immer noch so sein?
Da sich Redis im Laufe der Jahre verbessert hat, ist es glücklicherweise leicht herauszufinden, wie man Redis richtig zum Zwischenspeichern von Sitzungsdokumenten verwendet. Auch die bekannte kommerzielle Plattform Magento stellt Redis-Plug-Ins zur Verfügung.
(2), Full Page Cache (FPC)
Zusätzlich zu den grundlegenden Sitzungstokens bietet Redis auch eine sehr einfache FPC-Plattform. Zurück zum Konsistenzproblem: Selbst wenn die Redis-Instanz neu gestartet wird, werden Benutzer aufgrund der Festplattenpersistenz keinen Rückgang der Seitenladegeschwindigkeit feststellen. Dies ist eine große Verbesserung, ähnlich wie bei PHP Local FPC.
Nehmen wir noch einmal Magento als Beispiel: Magento bietet ein Plug-in zur Verwendung von Redis als Backend für den Ganzseiten-Cache.
Darüber hinaus verfügt Pantheon für WordPress-Benutzer über ein sehr gutes Plug-in wp-redis, mit dem Sie die von Ihnen durchsuchten Seiten so schnell wie möglich laden können.
(3), Warteschlange
Einer der großen Vorteile von Redis im Bereich der Speicher-Engines besteht darin, dass es Listen- und Set-Operationen bereitstellt, wodurch Redis als gute Plattform für Nachrichtenwarteschlangen verwendet werden kann. Die von Redis als Warteschlange verwendeten Vorgänge ähneln den Push/Pop-Vorgängen der Liste in lokalen Programmiersprachen (wie Python).
Wenn Sie in Google schnell nach „Redis-Warteschlangen“ suchen, werden Sie sofort auf eine große Anzahl von Open-Source-Projekten stoßen. Der Zweck dieser Projekte besteht darin, mit Redis sehr gute Back-End-Tools zu erstellen, um verschiedene Warteschlangenanforderungen zu erfüllen. Celery verfügt beispielsweise über ein Backend, das Redis als Broker verwendet. Sie können es hier anzeigen.
(4), Ranking/Zähler
Redis implementiert die Operation zum Erhöhen oder Verringern von Zahlen im Speicher sehr gut. Sets und sortierte Sets machen es uns auch sehr einfach, diese Operationen durchzuführen. Redis stellt lediglich diese beiden Datenstrukturen bereit. Wir möchten also die Top-10-Benutzer aus der sortierten Menge erhalten – nennen wir sie „user_scores“, wir müssen sie nur wie folgt ausführen:
ZRANGE user_scores 0 10 WITHSCORES
Agora Games ist ein gutes Beispiel, das in Ruby implementiert ist und dessen Rangliste verwendet Redis zum Speichern von Daten können Sie hier sehen.
(5), Veröffentlichen/Abonnieren
Last (aber sicherlich nicht zuletzt) ist die Publish/Subscribe-Funktion von Redis. Es gibt tatsächlich viele Anwendungsfälle für Publish/Subscribe. Ich habe gesehen, wie Leute es in sozialen Netzwerkverbindungen, als Auslöser für Veröffentlichungs-/Abonnement-basierte Skripte und sogar zum Aufbau von Chat-Systemen mithilfe der Veröffentlichungs-/Abonnement-Funktionalität von Redis verwenden! (Nein, das stimmt, Sie können es überprüfen
).
Verwandte Empfehlungen:
Das obige ist der detaillierte Inhalt vonDie häufigsten Interviewfragen in Redis. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!