What is the proper way to handle Redis connection in Tornado ? (Async - Pub/Sub)

前端 未结 2 1417
南旧
南旧 2021-02-06 07:12

I am using Redis along with my Tornado application with asyc client Brukva, when I looked at the sample apps at Brukva site they are making new connection on \"init

2条回答
  •  被撕碎了的回忆
    2021-02-06 07:25

    you should pool the connections in your app. since it seems like brukva doesn't support this automatically (redis-py supports this, but is blocking by nature so it doesn't go well with tornado), you need to write your own connection pool.

    the pattern is pretty simple, though. something along these lines (this is not real operational code):

    class BrukvaPool():
    
        __conns = {}
    
    
        def get(host, port,db):
            ''' Get a client for host, port, db '''
    
            key = "%s:%s:%s" % (host, port, db)
    
            conns = self.__conns.get(key, [])
            if conns:
                ret = conns.pop()
                return ret
            else:
               ## Init brukva client here and connect it
    
        def release(client):
            ''' release a client at the end of a request '''
            key = "%s:%s:%s" % (client.connection.host, client.connection.port, client.connection.db)
            self.__conns.setdefault(key, []).append(client)
    

    it can be a bit more tricky, but that's the main idea.

提交回复
热议问题