sql >> データベース >  >> NoSQL >> Redis

PythonでRedis接続プールを使用する正しい方法

    A1:はい、同じ接続プールを使用しています。

    A2:これは良い習慣ではありません。このインスタンスの初期化を制御することはできません。別の方法として、シングルトンを使用することもできます。

    import redis
    
    
    class Singleton(type):
        """
        An metaclass for singleton purpose. Every singleton class should inherit from this class by 'metaclass=Singleton'.
        """
        _instances = {}
    
        def __call__(cls, *args, **kwargs):
            if cls not in cls._instances:
                cls._instances[cls] = super(Singleton, cls).__call__(*args, **kwargs)
            return cls._instances[cls]
    
    
    class RedisClient(object):
    
        def __init__(self):
            self.pool = redis.ConnectionPool(host = HOST, port = PORT, password = PASSWORD)
    
        @property
        def conn(self):
            if not hasattr(self, '_conn'):
                self.getConnection()
            return self._conn
    
        def getConnection(self):
            self._conn = redis.Redis(connection_pool = self.pool)
    

    次に、RedisClient シングルトンクラスになります。 client = RedisClient()を何度呼び出してもかまいません 、同じオブジェクトを取得します。

    したがって、次のように使用できます:

    from RedisClient import RedisClient
    
    client = RedisClient()
    species = 'lion'
    key = 'zoo:{0}'.format(species)
    data = client.conn.hmget(key, 'age', 'weight')
    print(data)
    

    そして、初めてclient = RedisClient()を呼び出すとき 実際にこのインスタンスを初期化します。

    または、さまざまな引数に基づいてさまざまなインスタンスを取得することもできます:

    class Singleton(type):
        """
        An metaclass for singleton purpose. Every singleton class should inherit from this class by 'metaclass=Singleton'.
        """
        _instances = {}
    
        def __call__(cls, *args, **kwargs):
            key = (args, tuple(sorted(kwargs.items())))
            if cls not in cls._instances:
                cls._instances[cls] = {}
            if key not in cls._instances[cls]:
                cls._instances[cls][key] = super(Singleton, cls).__call__(*args, **kwargs)
            return cls._instances[cls][key]
    



    1. MongoDBは削除されたスペースを再利用しますか?

    2. Spring-data-Redisを使用してRedisMulti-Execを実装する方法

    3. SQLで短い月の名前を取得する方法

    4. CDPプライベートクラウドベース7とCDH5の運用データベースのパフォーマンスの向上