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

Hvad er den rigtige måde at håndtere Redis-forbindelse i Tornado? (Asynkron - Pub/Sub)

Lidt sent, men jeg har brugt tornado-redis. Det virker med tornados ioloop og tornado.gen modul

Installer tornadoredis

Det kan installeres fra pip

pip install tornadoredis

eller med opsætningsværktøjer

easy_install tornadoredis

men det burde du virkelig ikke gøre. Du kan også klone depotet og udtrække det. Kør derefter

python setup.py build
python setup.py install

Opret forbindelse til redis

Følgende kode går i din main.py eller tilsvarende

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

redis.connect kaldes kun én gang. Det er et blokerende opkald, så det skal kaldes, før du starter hoved-ioloopen. Det samme forbindelsesobjekt er delt mellem alle behandlerne.

Du kan tilføje det til dine applikationsindstillinger som

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

Brug tornadoredis

Forbindelsen kan bruges i handlere som self.settings['redis'] eller det kan tilføjes som en egenskab for BaseHandler-klassen. Dine anmodningsbehandlere underklasserer den klasse og får adgang til egenskaben.

class BaseHandler(tornado.web.RequestHandler):

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

For at kommunikere med redis skal du bruge tornado.web.asynchronous og tornado.gen.engine der bruges dekoratører

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}

Ekstra information

Flere eksempler og andre funktioner såsom forbindelsespooling og pipelines kan findes på github-repoen.



  1. Spark på HBase med Spark-skal

  2. Hent indekset for et element efter værdi i en redis-liste

  3. hvordan får man nøgler, der ikke matcher et bestemt mønster i redis?

  4. Samlingsobjekt kan ikke kaldes fejl med PyMongo