Redis
 sql >> Cơ Sở Dữ Liệu >  >> NoSQL >> Redis

Cách sử dụng Redis Connection Pool trong Python đúng cách

A1:Có, chúng sử dụng cùng một nhóm kết nối.

A2:Đây không phải là một thực hành tốt. Vì bạn không thể kiểm soát việc khởi tạo phiên bản này. Một giải pháp thay thế có thể là sử dụng singleton.

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)

Sau đó, RedisClient sẽ là một lớp singleton. Không quan trọng bạn gọi client = RedisClient() bao nhiêu lần , bạn sẽ nhận được cùng một đối tượng.

Vì vậy, bạn có thể sử dụng nó như:

from RedisClient import RedisClient

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

Và lần đầu tiên bạn gọi client = RedisClient() sẽ thực sự khởi tạo phiên bản này.

Hoặc bạn có thể muốn nhận phiên bản khác nhau dựa trên các đối số khác nhau:

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. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Đặt khóa tiền tố bộ đệm Redis trên Symfony

  2. Cách phân tích và tối ưu hóa việc sử dụng bộ nhớ trong Redis

  3. Cập nhật thực thể trong redis với spring-data-redis

  4. Lệnh tùy chỉnh của Redis

  5. Chuyển từ SQLite sang Redis