Heim  >  Artikel  >  Datenbank  >  Welche Methode wird beim Redis-Schlüsselwertdesign verwendet?

Welche Methode wird beim Redis-Schlüsselwertdesign verwendet?

PHPz
PHPznach vorne
2023-05-28 16:44:46681Durchsuche

    Unregelmäßigkeiten bei der Verwendung von Redis

    • Die in Redis gespeicherten Schlüsselnamen sind nicht standardisiert und relativ willkürlich;

    • Redis wird als Repository verwendet, es besteht die Gefahr eines Datenverlusts, und da besteht die Gefahr eines Datenverlusts ist kein Nachladeplan;

    • Redis speichert Schlüssel, ohne die Ablaufzeit festzulegen, was wiederum zum Absturz des Dienstes führt.

    • Redis speichert eine große Anzahl großer Daten Schlüssel, die viel Netzwerkbandbreite beanspruchen, wenn die Anwendung sie erhält, und das Löschen kann leicht zu einer Überlastung führen.

    • Unsachgemäße Verwendung des Redis-Clients, was zu einer Zeitüberschreitung für andere Client-Verbindungen führen kann ist falsch und der Verbindungspool wird nicht verwendet. Eine große Anzahl von Verbindungswiederholungen führt zu einer Erschöpfung der Systemportressourcen , wie z. B. die Verwendung von Tasten* oder Flushall-Befehlen während der Hauptgeschäftszeiten;

    • Empfehlungen und Vorschläge für Geschäftsszenarien zur Redis-Nutzung

    Szenarien mit hoher Parallelität: Hotspot-Daten-Caching. Es kann die Gesamtreaktionsgeschwindigkeit des Systems verbessern und die IO-Druck der Datenbank;

    • Zeitlich begrenztes Szenario: Verwenden Sie den Redis-Expire-Befehl, um den Ablauf und die Erneuerung der Sitzung, den Mobiltelefon-Verifizierungscode usw. festzulegen.

    • Mit der Redis-Liste und den geordneten Satzdatenstrukturen können verschiedene implementiert werden komplexe Ranking-Anwendungen

    • Datenerfassungsoperationen: Verwenden Sie Redis-Listen, -Sets, sortierte Sets, um Datenberechnungen wie Schnittmenge, Vereinigung, Differenzmenge usw. zu erleichtern.

    • Kontinuierliches Einchecken: Sie können Redis verwenden Die Bitmap-Datenstruktur implementiert anmeldebezogene Dienste.

    • Zähler: Verwenden Sie die Befehle Redis incr und incrby, um API-Rufnummernstatistiken, API-Strombegrenzungen und andere Szenarien zu implementieren Schreibverteilungssperre, typische Open-Source-Komponenten wie Redisson;

    • So entwerfen Sie einen eleganten Schlüssel

    • Man kann sagen, dass bei der Online-Leistungsoptimierung von Redis häufig ein unangemessenes Schlüsseldesign die Hauptursache des Problems ist Im Wesentlichen haben die meisten Schüler, wie ich persönlich gesehen habe, fast keine Vorstellung vom Schlüsseldesign bei der Verwendung von Redis, da das Szenario, das die meisten Schüler verwenden, Schlüssel/Wert ist und die entsprechenden Daten Die Struktur ist Zeichenfolge Schlüssel/Zeichenfolge
    • Studenten, die ein tieferes Verständnis von Redis haben, wissen möglicherweise, dass das Schlüsseldesign beim Speichern so kurz wie möglich sein sollte und es am besten ist, ein Gefühl für die Hierarchie in der Mitte zu haben. Fahren Sie am besten fort mit: Segmentierung ...

    • Wie können wir also einen eleganteren Schlüssel entwerfen? Lassen Sie uns anhand der tatsächlichen Erfahrungen des Herausgebers und der aufgetretenen Fallstricke ausführlich darüber sprechen.

    1 Befolgen Sie die folgenden Best-Practice-Konventionen. Befolgen Sie das Grundformat: [Firmenname]: [id];

    Schlüssellänge sollte 44 Bytes nicht überschreiten;

    In Bezug auf die oben genannten Vorschläge hat dies die folgenden Vorteile:

    1. Lesbar Starke Flexibilität, z Wenn wir beispielsweise eine solche Schlüsselstruktur entwerfen, order:user:10, wissen wir auf einen Blick, dass es sich um einen Schlüssel handelt, der sich auf Benutzeraufträge bezieht.

    2. ist praktisch für Wartung und Verwaltung, verschiedene Anwendungen oder verschiedene Unternehmen verwenden unterschiedliche Das Präfix ist sehr praktisch für die Suche und Lokalisierung von Schlüsseln in visuellen Client-Tools oder Befehlszeilen.

    3. Vermeiden Sie Schlüsselkonflikte und vermeiden Sie Cache-Schlüsselkonflikte, die dadurch verursacht werden, dass mehrere Personen während der Verwendung Werte wie userId als Schlüssel verwenden

      Verwenden Sie den String-Typ als Schlüssel. Die zugrunde liegende Codierung umfasst int, embstr und raw, wodurch die Speichernutzung effektiv reduziert werden kann. Mit Embstr können Zeichenfolgen verarbeitet werden, die kleiner als 44 Bytes sind und gleichzeitig weniger Speicher beanspruchen, da kontinuierlicher Speicherplatz verwendet wird Geben Sie Schlüssel ein. Es wird empfohlen, dass die Anzahl der Elemente weniger als 1000 beträgt.

    2. Versuchen Sie, Bigkeys zu vermeiden die Anzahl der Mitglieder im Schlüssel, zum Beispiel: Das Datenvolumen von
    • Schlüssel selbst ist zu groß: ein Schlüssel vom Typ String, sein Wert beträgt 5 MB; : ein Schlüssel vom Typ ZSET, seine Anzahl an Mitgliedern beträgt 10.000; 2. Schaden von BigKey: Netzwerküberlastung wo es sich befindet, um langsamer zu werden.
    • Redis-Blockierung
      • Operationen an Hash, Liste, Zset usw. mit vielen Elementen werden lange dauern und dazu führen, dass der Hauptthread blockiert wird; die CPU-Auslastung in die Höhe schnellen lassen, was Auswirkungen auf die Redis-Instanz und andere Anwendungen auf der Maschine hat

        Nutzung: Der von redis-cli bereitgestellte Parameter --bigkeys kann alle Schlüssel durchlaufen und analysieren und die gesamten statistischen Informationen des Schlüssels und des Top-1-Big-Keys aller Daten zurückgeben Schreiben Sie ein Programm und verwenden Sie scan, um alle Schlüssel in Redis zu scannen, und verwenden Sie strlen, hlen und andere Befehle, um die Länge des Schlüssels zu bestimmen (SPEICHERNUTZUNG wird hier nicht empfohlen).
      • Verwenden Sie Tools von Drittanbietern wie Redis. Rdb-Tools analysiert RDB-Snapshot-Dateien und analysiert umfassend die Speichernutzung

      Drei: Verwenden Sie geeignete Datentypen.

        Wie oben erwähnt, verwenden viele Studenten, die Redis zum ersten Mal verwenden, für viele Geschäftsszenarien eine einfache Struktur von Schlüssel/Wert Denken Sie nicht tief darüber nach, ob dies sinnvoll ist oder ob dies in Zukunft zu damit verbundenen Leistungsproblemen führen wird.
      • Für dieses Problem müssen wir grundsätzlich ein tiefgreifendes Verständnis und eine Beherrschung der häufig verwendeten Datentypen haben Redis. Auf dieser Grundlage können wir Lösungen für verschiedene Geschäftsszenarien entwerfen.

      • Lassen Sie uns darüber nachdenken, wie Daten wie Benutzerobjektlisten zwischengespeichert werden.

      Option 1: Schlüssel ist usrId, Wert ist die serialisierte Zeichenfolge des Objekts, die Datenstruktur ähnelt der folgenden:

      • Vorteile: einfacher Zugriff, einfach und grob, nur JSON erforderlich Beim Zugriff einfach in das Objekt konvertieren.

        Nachteile: Datenkopplung, nicht flexibel genug. Sobald das Objekt Felder hinzufügt oder löscht, sind die Kosten für die Cache-Rekonstruktion sehr hoch Cache-Benutzer-ID-Liste, die Datenstruktur ist wie folgt; 3: Verwenden Sie eine Hash-Struktur, um Objekte zwischenzuspeichern. Die Daten lauten wie folgt: Die unterste Ebene verwendet eine Ziplist, die wenig Platz einnimmt und flexibel auf alle Felder des Objekts zugreifen kann ist relativ kompliziert;
      Redis-Cache wird tatsächlich verwendet. Verwendungsvorschläge in der Anwendung

      [Empfohlen] Erwärmen Sie den Cache. Vor dem Zugriff auf Daten sollte der Cache vorgewärmt werden, um zu verhindern, dass eine große Anzahl von Anforderungen direkt in die Datenspeicherschicht gelangt. Entsprechend den Geschäftsbedingungen sollten heiße und kalte Daten aufgeteilt und heiße Daten vorgewärmt werden. Wie Lizenzinformationen, Apikey usw.;
      • [Empfohlen] Verwenden Sie gemeinsam den lokalen Cache. Obwohl lokales Caching in einer verteilten Architektur die Stabilität und Geschwindigkeit des Datenzugriffs verbessern kann, muss es mit Vorsicht verwendet werden, um die Einführung zustandsbehafteter Serverknoten zu vermeiden. Vermeiden Sie, dass lokale Caches übermäßig Ressourcen des Anwendungsservers belegen, was zu Abstürzen des Anwendungsknotens führt Der Redis-Server kann Pipeline- oder andere Batch-Betriebsmethoden verwenden.

      [Empfohlen] Große Liste, Satz, Hash, große Speichermenge. Beim Abrufen einer großen Anzahl von Elementen kommt es zu einer großen Verzögerung, die die Ausführung anderer Befehle blockiert. Es wird empfohlen, es in mehrere kleine Listen, Sätze oder Hash-Tabellen aufzuteilen

      • Verwenden Sie Geschäftsspezifikationen

        Ob es sich um Redis oder andere in der Entwicklung verwendete Middleware handelt, wenn es um Entwicklung und Verwendung geht, ist es am besten, einen Satz zu entwickeln Diese Spezifikation sollte von den meisten Entwicklern im Voraus erkannt und in der Praxis getestet werden. Sobald sie als Spezifikation festgelegt ist, sollte sie zu einer täglichen Regel werden, die internen Entwicklern als Leitfaden dient sind wie folgt:

      Redis sollte als Cache-Daten positioniert werden und kann nicht zum Speichern großer Datenmengen verwendet werden (es kann die Datenbank nicht ersetzen);

      • Redis eignet sich für Szenarien mit mehr Lesevorgängen und weniger Schreibvorgängen, z B. Hochfrequenz-Schreib- und Niederfrequenz-Abfrageszenarien, wird die Verwendung nicht empfohlen.

      Wenn Sie sich über die Überlebenszeit des Schlüssels nicht sicher sind, ist es am besten, die Ablaufzeit festzulegen, um den Lebenszyklus zu steuern des Schlüssels

    • Sie sollten die Trennung von heißen und kalten Daten in Betracht ziehen, Redis für hochfrequente Geschäftsabfragen verwenden und die Verwendung der Datenbank für niederfrequente Abfragen in Betracht ziehen Das Risiko eines Datenverlusts in Redis besteht darin, dass Sie die Daten aus der Datenbank automatisch laden und in Redis zwischenspeichern müssen.

    • Verwenden Sie O(N)-Befehle mit Vorsicht, z. B. list, set, hash Strukturen, hgetall, lrange, smembers, zrange usw. sind nicht unbrauchbar, indem stattdessen hscan und sscan verwendet werden.

    Das obige ist der detaillierte Inhalt vonWelche Methode wird beim Redis-Schlüsselwertdesign verwendet?. 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