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

Wie fragt man Redis von Tornado *richtig* ab?

Wenn Sie Befehle wie BLPOP blockieren oder einen Pub/Sub-Kanal abhören möchten, benötigen Sie einen asynchronen Client wie tornado-redis. Sie können mit dieser Demo beginnen, um zu sehen, wie der Tornado-Redis-Client verwendet werden kann, um eine einfache öffentliche Chat-Anwendung zu entwickeln.

Aber ich würde empfehlen, für die meisten anderen Fälle den synchronen Redis-Py-Client in Verbindung mit HireDis zu verwenden.

Der Hauptvorteil des asynchronen Clients besteht darin, dass Ihr Server eingehende Anforderungen verarbeiten kann, während er auf die Antwort des Redis-Servers wartet. Der Redis-Server ist jedoch so schnell, dass in den meisten Fällen ein Mehraufwand für die Einrichtung asynchroner Rückrufe in Ihrer Tornado-Anwendung mehr zur Gesamtzeit der Anforderungsverarbeitung hinzufügt als die Zeit, die für das Warten auf die Antwort des Redis-Servers aufgewendet wird.

Wenn Sie einen asynchronen Client verwenden, können Sie versuchen, mehrere Anfragen gleichzeitig an den Redis-Server zu senden, aber der Redis-Server ist ein Single-Threaded-Server (genau wie der Tornado-Server), sodass er diese Anfragen nacheinander beantwortet Sie werden fast nichts gewinnen. Und tatsächlich müssen Sie nicht mehrere Redis-Befehle gleichzeitig an denselben Redis-Server senden, solange Pipelines und Befehle wie MGET/MSET vorhanden sind.

Ein asynchroner Client hat einige Vorteile, wenn Sie mehrere Redis-Serverinstanzen verwenden, aber ich schlage vor, einen synchronen (redis-py) Client und einen Proxy wie twemproxy oder diesen zu verwenden (letzterer unterstützt Pipelining und MGET/MSET-Befehle).

Außerdem schlage ich vor, das Verbindungspooling nicht zu verwenden, wenn der Redis-Py-Client in Tornado-Anwendungen verwendet wird . Erstellen Sie einfach ein einzelnes Redis Objektinstanz für jede Redis-Datenbank, mit der Ihre Anwendung eine Verbindung herstellt.