Redis
 sql >> Datenbank >  >> NoSQL >> Redis

Leistung von Redis vs. Disk in Caching-Anwendungen

Dies ist ein Vergleich zwischen Äpfeln und Birnen. Siehe http://redis.io/topics/benchmarks

Redis ist eine effiziente Fernbedienung Datenspeicher. Jedes Mal, wenn ein Befehl auf Redis ausgeführt wird, wird eine Nachricht an den Redis-Server gesendet, und wenn der Client synchron ist, blockiert er das Warten auf die Antwort. Neben den Kosten für den Befehl selbst zahlen Sie also für einen Netzwerk-Roundtrip oder einen IPC.

Auf moderner Hardware sind Netzwerk-Roundtrips oder IPCs im Vergleich zu anderen Operationen überraschend teuer. Dies ist auf mehrere Faktoren zurückzuführen:

  • die Rohlatenz des Mediums (hauptsächlich für das Netzwerk)
  • die Latenz des Betriebssystem-Schedulers (unter Linux/Unix nicht garantiert)
  • Speicher-Cache-Fehlschläge sind teuer, und die Wahrscheinlichkeit von Cache-Fehlschlägen steigt, während die Client- und Serverprozesse ein-/ausgeplant werden.
  • auf High-End-Boxen, NUMA-Nebenwirkungen

Sehen wir uns nun die Ergebnisse an.

Vergleicht man die Implementierung mit Generatoren und die mit Funktionsaufrufen, generieren sie nicht die gleiche Anzahl von Roundtrips zu Redis. Mit dem Generator haben Sie einfach:

    while time.time() - t - expiry < 0:
        yield r.get(fpKey)

Also 1 Roundtrip pro Iteration. Mit der Funktion haben Sie:

if r.exists(fpKey):
    return r.get(fpKey)

Also 2 Roundtrips pro Iteration. Kein Wunder, dass der Generator schneller ist.

Natürlich sollten Sie dieselbe Redis-Verbindung für eine optimale Leistung wiederverwenden. Es hat keinen Sinn, einen Benchmark durchzuführen, der systematisch verbindet/trennt.

Schließlich vergleichen Sie in Bezug auf den Leistungsunterschied zwischen Redis-Aufrufen und den Dateilesevorgängen einfach einen lokalen Aufruf mit einem Remote-Aufruf. Dateilesevorgänge werden vom Dateisystem des Betriebssystems zwischengespeichert, sodass es sich um schnelle Speicherübertragungsvorgänge zwischen dem Kernel und Python handelt. Hier ist keine Festplatten-E/A beteiligt. Mit Redis müssen Sie die Kosten für die Hin- und Rückfahrt bezahlen, daher ist es viel langsamer.