RedisPool

class RedisPool(object):
    instance = None

    def __init__(self, host='192.168.2.129', port=7000, password='C11O47S@xxx', db=5):
        self.host = 'localhost' if debug == 1 else host
        self.port = 6379 if debug == 1 else port
        self.password = 'root' if debug == 1 else password
        self.db = '0' if debug == 1 else db
        self.pool = redis.ConnectionPool(host=self.host, port=self.port, password=self.password, db=self.db)
        self.conn = redis.Redis(connection_pool=self.pool)
        self.keys = None
        # self.p = self.conn.pipeline(transaction=False)

    def __new__(cls, *args, **kwargs):
        if cls.instance:
            return cls.instance
        else:
            return super().__new__(cls)

    def __enter__(self):
        if not hasattr(self, 'keys') or self.keys is None:
            self.keys = self.fetch_keys()
        return self

    def __exit__(self, exc_type, exc_val, exc_tb):
        try:
            # self.p.close()
            self.conn.close()
        except:
            raise Exception("关闭redis链接异常")

    def fetch_keys(self):
        keys = self.conn.keys()
        return [key.decode() for key in keys if 'list' in self.conn.type(key.decode()).decode()]

    def push_to_key(self, key, line):
        self.conn.lpush(key, line)

    def total_by_key(self, key):
        return self.conn.llen(key)

    def pop_key(self, key):
        return self.conn.lpop(key)

    def fetch_from_redis(self, rediskey=None):
        if rediskey is None:
            return None
        try:
            line = self.pop_key(rediskey)
        except Exception as e:
            print("{key} has no records".format(key=rediskey))
            return None
        return line
原文地址:https://www.cnblogs.com/xiao-xue-di/p/12765335.html