Redis
 sql >> Database >  >> NoSQL >> Redis

Qual è il modo corretto di gestire la connessione Redis in Tornado? (Asincrono - Pub/Sub)

Un po' in ritardo, ma ho usato tornado-redis. Funziona con ioloop di tornado e tornado.gen modulo

Installa tornadoredis

Può essere installato da pip

pip install tornadoredis

o con gli strumenti di configurazione

easy_install tornadoredis

ma davvero non dovresti farlo. Puoi anche clonare il repository ed estrarlo. Quindi esegui

python setup.py build
python setup.py install

Connetti a redis

Il codice seguente va nel tuo main.py o equivalente

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

redis.connect viene chiamato solo una volta. È una chiamata di blocco, quindi dovrebbe essere chiamata prima di avviare l'ioloop principale. Lo stesso oggetto di connessione è condiviso tra tutti i gestori.

Potresti aggiungerlo alle impostazioni dell'applicazione come

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

Usa tornadoredis

La connessione può essere utilizzata nei gestori come self.settings['redis'] oppure può essere aggiunto come proprietà della classe BaseHandler. I gestori delle richieste sottoclasse quella classe e accedono alla proprietà.

class BaseHandler(tornado.web.RequestHandler):

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

Per comunicare con redis, il tornado.web.asynchronous e il tornado.gen.engine vengono utilizzati decoratori

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}

Informazioni aggiuntive

Altri esempi e altre funzionalità come pool di connessioni e pipeline sono disponibili nel repository github.