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

Was ist der richtige Weg, um die Redis-Verbindung in Tornado zu handhaben? (Asynchron – Pub/Sub)

Etwas spät, aber ich habe Tornado-Redis verwendet. Es funktioniert mit Tornados ioloop und tornado.gen Modul

Tornadoredis installieren

Es kann von pip installiert werden

pip install tornadoredis

oder mit Setuptools

easy_install tornadoredis

aber das sollte man wirklich nicht machen. Sie können das Repository auch klonen und extrahieren. Dann ausführen

python setup.py build
python setup.py install

Mit redis verbinden

Der folgende Code wird in Ihre main.py oder eine gleichwertige Datei eingefügt

redis_conn = tornadoredis.Client('hostname', 'port')
redis_conn.connect()

redis.connect wird nur einmal aufgerufen. Es ist ein blockierender Aufruf, daher sollte er vor dem Start des Haupt-IOLoops aufgerufen werden. Dasselbe Verbindungsobjekt wird von allen Handlern gemeinsam genutzt.

Sie können es Ihren Anwendungseinstellungen wie

hinzufügen
settings = {
    redis = redis_conn
}
app = tornado.web.Application([('/.*', Handler),],
                              **settings)

Tornadoredis verwenden

Die Verbindung kann in Handlern als self.settings['redis'] verwendet werden oder es kann als Eigenschaft der BaseHandler-Klasse hinzugefügt werden. Ihre Request-Handler bilden eine Unterklasse dieser Klasse und greifen auf die Eigenschaft zu.

class BaseHandler(tornado.web.RequestHandler):

    @property
    def redis():
        return self.settings['redis']

Um mit Redis zu kommunizieren, muss der tornado.web.asynchronous und die tornado.gen.engine Dekorateure werden verwendet

class SomeHandler(BaseHandler):

    @tornado.web.asynchronous
    @tornado.gen.engine
    def get(self):
        foo = yield gen.Task(self.redis.get, 'foo')
        self.render('sometemplate.html', {'foo': foo}

Zusätzliche Informationen

Weitere Beispiele und andere Funktionen wie Verbindungspooling und Pipelines finden Sie im Github-Repo.