class RedisClient(object): """ Redis 客户端管理器 """ __metaclass__ = InstancePool def __init__(self, ip, port, db=0, pwd=None): self.sip = ip self.sport = port self.sdb = db self.spwd = pwd if platform.system() == 'Linux': self.redis_pool = ResourcePool(MAX_POOL_SIZE, Connection, host=self.sip, port=self.sport, db=self.sdb, password=self.spwd) else: self.redis_pool = redis.ConnectionPool(host=self.sip, port=self.sport, db=self.sdb, password=self.spwd) self.ping() def ping(self): conn = self.get_conn() err_msg = 'redis server[%s:%s] not exist!!' % (self.sip, self.sport) if platform.system() == 'Linux': assert conn.execute('PING'), err_msg else: assert conn.ping(), err_msg def get_conn(self): if platform.system() == 'Linux': conn = self.redis_pool else: conn = redis.Redis(connection_pool=self.redis_pool) return conn def set(self, *args, **kwargs): """ args = k,v,ex,nx,px,xx """ pipe = kwargs.get('pipe') conn = self.get_conn() if pipe is None else pipe if platform.system() == 'Linux': set_cmd = make_redis_set_cmd('SET', *args) res = conn.execute(*set_cmd) else: res = conn.set(*args) return res def get(self, *args, **kwargs): """ args = k """ pipe = kwargs.get('pipe') conn = self.get_conn() if pipe is None else pipe if platform.system() == 'Linux': res = conn.execute('GET', *args) else: res = conn.get(*args) return res def expire(self, *args, **kwargs): """ args = k,et """ pipe = kwargs.get('pipe') conn = self.get_conn() if pipe is None else pipe if platform.system() == 'Linux': res = conn.execute('EXPIRE', *args) else: res = conn.expire(*args) return res def delete(self, *args, **kwargs): """ args = *names """ pipe = kwargs.get('pipe') conn = self.get_conn() if pipe is None else pipe if platform.system() == 'Linux': res = conn.execute('DEL', *args) else: res = conn.delete(*args) return res def keys(self, *args, **kwargs): """ args = *pattern """ pipe = kwargs.get('pipe') conn = self.get_conn() if pipe is None else pipe if platform.system() == 'Linux': res = conn.execute('KEYS', *args) else: res = conn.keys(*args) return res def execute(self, cmd, pipe=None): """ 执行redis命令 cmd = (oper,k,v,,,,) """ if cmd[0] in cmd_support['get']: res = self.get(*cmd[1:], pipe=pipe) elif cmd[0] in cmd_support['set']: res = self.set(*cmd[1:], pipe=pipe) elif cmd[0] in cmd_support['expire']: res = self.expire(*cmd[1:], pipe=pipe) elif cmd[0] in cmd_support['delete']: res = self.delete(*cmd[1:], pipe=pipe) elif cmd[0] in cmd_support['keys']: res = self.keys(*cmd[1:], pipe=pipe) return res def pipe_execute(self, cmds): """ 执行redis管道命令 cmds = [(oper,k,v),,,] """ if platform.system() == 'Linux': for idx, cmd in enumerate(cmds): if cmd[0] in cmd_support['set']: cmds[idx] = make_redis_set_cmd(*cmd) res = self.redis_pool.execute_pipeline(*cmds) else: conn = self.get_conn() pipe = conn.pipeline() for cmd in cmds: self.execute(cmd, pipe) res = pipe.execute() return res
class RedisClient(object): """ Redis 客户端管理器 """ __metaclass__ = InstancePool def __init__(self, ip, port, db=0, pwd=None): self.sip = ip self.sport = port self.sdb = db self.spwd = pwd if pwd else None if platform.system() == 'Linux': self.redis_pool = ResourcePool(MAX_POOL_SIZE, Connection, host=self.sip, port=self.sport, db=self.sdb, password=self.spwd) else: self.redis_pool = redis.ConnectionPool(host=self.sip, port=self.sport, db=self.sdb, password=self.spwd) self.ping() def ping(self): conn = self.get_conn() err_msg = 'redis server[%s:%s] not exist!!' % (self.sip, self.sport) if platform.system() == 'Linux': assert conn.execute('PING'), err_msg else: assert conn.ping(), err_msg def get_conn(self): if platform.system() == 'Linux': conn = self.redis_pool else: conn = redis.Redis(connection_pool=self.redis_pool) return conn def set(self, *args, **kwargs): """ args = k,v,ex,nx,px,xx """ pipe = kwargs.get('pipe') conn = self.get_conn()if pipe is None else pipe if platform.system() == 'Linux': set_cmd = make_redis_set_cmd('SET', *args) res = conn.execute(*set_cmd) else: res = conn.set(*args) return res def get(self, *args, **kwargs): """ args = k """ pipe = kwargs.get('pipe') conn = self.get_conn()if pipe is None else pipe if platform.system() == 'Linux': res = conn.execute('GET', *args) else: res = conn.get(*args) return res def expire(self, *args, **kwargs): """ args = k,et """ pipe = kwargs.get('pipe') conn = self.get_conn()if pipe is None else pipe if platform.system() == 'Linux': res = conn.execute('EXPIRE', *args) else: res = conn.expire(*args) return res def delete(self, *args, **kwargs): """ args = *names """ pipe = kwargs.get('pipe') conn = self.get_conn()if pipe is None else pipe if platform.system() == 'Linux': res = conn.execute('DEL', *args) else: res = conn.delete(*args) return res def keys(self, *args, **kwargs): """ args = *pattern """ pipe = kwargs.get('pipe') conn = self.get_conn()if pipe is None else pipe if platform.system() == 'Linux': res = conn.execute('KEYS', *args) else: res = conn.keys(*args) return res def execute(self, cmd, pipe=None): """ 执行redis命令 cmd = (oper,k,v,,,,) """ if cmd[0] in cmd_support['get']: res = self.get(*cmd[1:], pipe=pipe) elif cmd[0] in cmd_support['set']: res = self.set(*cmd[1:], pipe=pipe) elif cmd[0] in cmd_support['expire']: res = self.expire(*cmd[1:], pipe=pipe) elif cmd[0] in cmd_support['delete']: res = self.delete(*cmd[1:], pipe=pipe) elif cmd[0] in cmd_support['keys']: res = self.keys(*cmd[1:], pipe=pipe) return res def pipe_execute(self, cmds): """ 执行redis管道命令 cmds = [(oper,k,v),,,] """ if platform.system() == 'Linux': for idx, cmd in enumerate(cmds): if cmd[0] in cmd_support['set']: cmds[idx] = make_redis_set_cmd(*cmd) res = self.redis_pool.execute_pipeline(*cmds) else: conn = self.get_conn() pipe = conn.pipeline() for cmd in cmds: self.execute(cmd, pipe) res = pipe.execute() return res