Redis
 sql >> Base de Dados >  >> NoSQL >> Redis

Qual é a maneira correta de lidar com a conexão Redis no Tornado? (Assíncrono - Pub/Sub)


Um pouco atrasado, mas estou usando o tornado-redis. Funciona com o ioloop do tornado e o tornado.gen módulo

Instalar tornadoredis

Pode ser instalado a partir do pip
pip install tornadoredis

ou com ferramentas de configuração
easy_install tornadoredis

mas você realmente não deveria fazer isso. Você também pode clonar o repositório e extraí-lo. Então corra
python setup.py build
python setup.py install

Conectar ao redis

O código a seguir vai em seu main.py ou equivalente
redis_conn = tornadoredis.Client('hostname', 'port')
redis_conn.connect()

redis.connect é chamado apenas uma vez. É uma chamada de bloqueio, portanto, deve ser chamada antes de iniciar o ioloop principal. O mesmo objeto de conexão é compartilhado entre todos os manipuladores.

Você pode adicioná-lo às configurações do seu aplicativo, como
settings = {
    redis = redis_conn
}
app = tornado.web.Application([('/.*', Handler),],
                              **settings)

Usar tornadoredis

A conexão pode ser usada em manipuladores como self.settings['redis'] ou pode ser adicionado como uma propriedade da classe BaseHandler. Seus manipuladores de solicitação subclassificam essa classe e acessam a propriedade.
class BaseHandler(tornado.web.RequestHandler):

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

Para se comunicar com redis, o tornado.web.asynchronous e o tornado.gen.engine decoradores são usados
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}

Informações extras

Mais exemplos e outros recursos, como pool de conexões e pipelines, podem ser encontrados no repositório do github.