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

Redis ist ein Single-Thread. Warum sollte ich dann Salat verwenden?

Weil Sie nicht nur Zeit damit verbringen, während Redis Befehle ausführt, sondern auch Daten übertragen (Befehle senden, Ergebnisse empfangen). Im Single-Thread-Modus funktioniert Redis während der Übertragung nicht. Während Redis funktioniert, findet keine Übertragung statt. Mehrere Verbindungen oder eine Pipeline-Verbindung sind hier, um Ihnen dabei zu helfen, sowohl die Bandbreite als auch die CPU-Zyklen zu sättigen.

Und bei luttece geht es nicht nur um Geschwindigkeit. Es hilft Ihnen auch dabei, Ihren Code mit einer asynchronen und reaktiven API besser zu organisieren.

Zurück zum Leistungsthema, hier ist ein einfacher Benchmark, um ein allgemeines Verständnis der Auswirkungen von Threading und Pooling zu erhalten. Beachten Sie, dass das Pooling zwar etwas langsamer ist (Sie verbringen einige Zeit mit Pooloperationen), es Ihnen jedoch ermöglicht, Aktionen zu isolieren (damit ein Fehler andere Threads nicht beeinflusst) und MULTI zu verwenden und Sperrbefehle.

Hier sind meine Ergebnisse (das lokale System hat 4 Kerne, die CPU des Remote-Systems ist etwa 2-mal langsamer):

Threads=1

Benchmark              (address)   Mode  Cnt      Score      Error  Units
LettuceThreads.pooled     socket  thrpt   25  35389.995 ± 1325.198  ops/s
LettuceThreads.pooled  localhost  thrpt   25  32075.870 ±  416.220  ops/s
LettuceThreads.pooled     remote  thrpt   25   3883.193 ±   67.622  ops/s
LettuceThreads.shared     socket  thrpt   25  39419.772 ± 1966.023  ops/s
LettuceThreads.shared  localhost  thrpt   25  34293.245 ± 1737.349  ops/s
LettuceThreads.shared     remote  thrpt   25   3919.251 ±   49.897  ops/s

Threads=2

Benchmark              (address)   Mode  Cnt      Score      Error  Units
LettuceThreads.pooled     socket  thrpt   25  56938.187 ± 2727.772  ops/s
LettuceThreads.pooled  localhost  thrpt   25  49420.748 ± 2091.631  ops/s
LettuceThreads.pooled     remote  thrpt   25   7791.706 ±  133.507  ops/s
LettuceThreads.shared     socket  thrpt   25  81195.900 ± 1593.424  ops/s
LettuceThreads.shared  localhost  thrpt   25  78404.688 ± 3878.044  ops/s
LettuceThreads.shared     remote  thrpt   25   3992.023 ±   39.092  ops/s

Threads=4

Benchmark              (address)   Mode  Cnt       Score      Error  Units
LettuceThreads.pooled     socket  thrpt   25   87345.126 ± 8149.009  ops/s
LettuceThreads.pooled  localhost  thrpt   25   75003.031 ± 4481.289  ops/s
LettuceThreads.pooled     remote  thrpt   25   15807.410 ±  225.376  ops/s
LettuceThreads.shared     socket  thrpt   25  169112.489 ± 3749.897  ops/s
LettuceThreads.shared  localhost  thrpt   25  115464.778 ± 5099.728  ops/s
LettuceThreads.shared     remote  thrpt   25    7952.492 ±  133.521  ops/s

Sie können hier sehen, dass die Leistung sehr gut mit der Anzahl der Threads skaliert, also ist Salat nicht nutzlos.