一、连接redis集群
python的redis库是不支持集群操作的,推荐库:redis-py-cluster。
安装
pip3 install redis-py-cluster
连接redis集群
#!/usr/bin/env python # coding: utf-8 from rediscluster import StrictRedisCluster class RedisCluster(object): # 连接redis集群 def __init__(self,conn_list): self.conn_list = conn_list # 连接列表 def connect(self): \"\"\" 连接redis集群 :return: object \"\"\" try: # 非密码连接redis集群 # redisconn = StrictRedisCluster(startup_nodes=self.conn_list) # 使用密码连接redis集群 redisconn = StrictRedisCluster(startup_nodes=self.conn_list, password=\'123456\') return redisconn except Exception as e: print(e) print(\"错误,连接redis 集群失败\") return False redis_basis_conn = [{\'host\': \'192.168.10.168\', \'port\': 7201}, {\'host\': \'192.168.10.169\', \'port\': 7201}, {\'host\': \'192.168.10.170\', \'port\': 7201}, {\'host\': \'192.168.10.171\', \'port\': 7201}, {\'host\': \'192.168.10.142\', \'port\': 7201}, {\'host\': \'192.168.10.143\', \'port\': 7201}] res = RedisCluster(redis_basis_conn).connect() if not res: print(\"连接redis集群失败\") else: print(\"连接redis集群成功\")
执行输出:
连接redis集群成功
二、操作redis集群
查看节点状态
#!/usr/bin/env python # coding: utf-8 from rediscluster import StrictRedisCluster class RedisCluster(object): # 连接redis集群 def __init__(self,conn_list): self.conn_list = conn_list # 连接列表 def connect(self): \"\"\" 连接redis集群 :return: object \"\"\" try: # 非密码连接redis集群 # redisconn = StrictRedisCluster(startup_nodes=self.conn_list) # 使用密码连接redis集群 redisconn = StrictRedisCluster(startup_nodes=self.conn_list, password=\'123456\') return redisconn except Exception as e: print(e) print(\"错误,连接redis 集群失败\") return False def get_state(self): \"\"\" 获取状态 :return: \"\"\" res = RedisCluster(self.conn_list).connect() # print(\"连接集群对象\",res,type(res),res.__dict__) if not res: return False dic = res.cluster_info() # 查看info信息, 返回dict for i in dic: # 遍历dict ip = i.split(\":\")[0] if dic[i].get(\'cluster_state\'): # 获取状态 print(\"节点状态, ip: \", ip, \"value: \", dic[i].get(\'cluster_state\')) redis_basis_conn = [{\'host\': \'192.168.10.168\', \'port\': 7201}, {\'host\': \'192.168.10.169\', \'port\': 7201}, {\'host\': \'192.168.10.170\', \'port\': 7201}, {\'host\': \'192.168.10.171\', \'port\': 7201}, {\'host\': \'192.168.10.142\', \'port\': 7201}, {\'host\': \'192.168.10.143\', \'port\': 7201}] RedisCluster(redis_basis_conn).get_state()
执行输出:
节点状态, ip: 192.168.10.171 value: ok 节点状态, ip: 192.168.10.169 value: ok 节点状态, ip: 192.168.10.143 value: ok 节点状态, ip: 192.168.10.142 value: ok 节点状态, ip: 192.168.10.170 value: ok 节点状态, ip: 192.168.10.168 value: ok
查看aof是否开启
#!/usr/bin/env python # coding: utf-8 from rediscluster import StrictRedisCluster class RedisCluster(object): # 连接redis集群 def __init__(self,conn_list): self.conn_list = conn_list # 连接列表 def connect(self): \"\"\" 连接redis集群 :return: object \"\"\" try: # 非密码连接redis集群 # redisconn = StrictRedisCluster(startup_nodes=self.conn_list) # 使用密码连接redis集群 redisconn = StrictRedisCluster(startup_nodes=self.conn_list, password=\'123456\') return redisconn except Exception as e: print(e) print(\"错误,连接redis 集群失败\") return False def get_info(self): \"\"\" 获取redis集群info信息 :return: dict \"\"\" res = RedisCluster(self.conn_list).connect() # print(\"连接集群对象\",res,type(res),res.__dict__) if not res: return False dic = res.cluster_info() # 查看info信息, 返回dict if not dic: return False return dic def get_state(self): \"\"\" 获取状态 :return: \"\"\" dic = self.get_info() # type:dict if not dic: return dic for i in dic: # 遍历dict ip = i.split(\":\")[0] if dic[i].get(\'cluster_state\'): # 获取状态 print(\"节点状态, ip: \", ip, \"value: \", dic[i].get(\'cluster_state\')) def get_has_aof(self): \"\"\" 查看aof是否打开 :return: \"\"\" res = RedisCluster(self.conn_list).connect() # print(\"连接集群对象\",res,type(res),res.__dict__) if not res: return False dic = res.config_get(\'appendonly\') # 从config配置项中查询appendonly for i in dic: ip = i.split(\":\")[0] # print(dic[i]) if dic[i].get(\'appendonly\'): print(\"aof开关, ip: \", ip,\"value: \",dic[i].get(\'appendonly\')) redis_basis_conn = [{\'host\': \'192.168.10.168\', \'port\': 7201}, {\'host\': \'192.168.10.169\', \'port\': 7201}, {\'host\': \'192.168.10.170\', \'port\': 7201}, {\'host\': \'192.168.10.171\', \'port\': 7201}, {\'host\': \'192.168.10.142\', \'port\': 7201}, {\'host\': \'192.168.10.143\', \'port\': 7201}] RedisCluster(redis_basis_conn).get_has_aof()
执行输出:
aof开关, ip: 192.168.10.170 value: no aof开关, ip: 192.168.10.168 value: no aof开关, ip: 192.168.10.142 value: no aof开关, ip: 192.168.10.171 value: no aof开关, ip: 192.168.10.169 value: no aof开关, ip: 192.168.10.143 value: no
set和get
#!/usr/bin/env python # coding: utf-8 from rediscluster import StrictRedisCluster class RedisCluster(object): # 连接redis集群 def __init__(self,conn_list): self.conn_list = conn_list # 连接列表 def connect(self): \"\"\" 连接redis集群 :return: object \"\"\" try: # 非密码连接redis集群 # redisconn = StrictRedisCluster(startup_nodes=self.conn_list) # 使用密码连接redis集群 redisconn = StrictRedisCluster(startup_nodes=self.conn_list, password=\'123456\') return redisconn except Exception as e: print(e) print(\"错误,连接redis 集群失败\") return False # 连接列表,注意:必须严格按照此格式来! redis_basis_conn = [{\'host\': \'192.168.10.168\', \'port\': 7201}, {\'host\': \'192.168.10.169\', \'port\': 7201}, {\'host\': \'192.168.10.170\', \'port\': 7201}, {\'host\': \'192.168.10.171\', \'port\': 7201}, {\'host\': \'192.168.10.142\', \'port\': 7201}, {\'host\': \'192.168.10.143\', \'port\': 7201}] redis_conn = RedisCluster(redis_basis_conn).connect() # redis连接对象 redis_conn.set(\'name\',\'weijing\') # 插入一个值 print(\"name is: \", redis_conn.get(\'name\')) # 查询值
执行输出:
name is: b\'weijing\'