zoukankan      html  css  js  c++  java
  • python 操作redis集群

    一、连接redis集群

    python的redis库是不支持集群操作的,推荐库:redis-py-cluster,一直在维护。还有一个rediscluster库,看GitHub上已经很久没更新了。

    安装

    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集群成功")
    View Code

    执行输出:

    连接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()
    View Code

    执行输出:

    节点状态, 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()
    View Code

    执行输出:

    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','admin')  # 插入一个值
    print("name is: ", redis_conn.get('name'))  # 查询值
    View Code

    执行输出:

    name is:  b'admin'

    注意:get出来的值,是bytes类型的。

    其他redis操作,比如hget,hgetall... 和redis单例模式,是一样的。

    这里就不一一演示了

  • 相关阅读:
    wamp的安装
    原型模式(clone模式)
    观察者模式observer(用于不同类的中 板块的显示或其它操作)
    数据对象映射模式(通过工厂模式和注册树模式)v2
    数据对象映射模式(及对象的相关属性和数据库表中的字段一一对应)
    策略模式根据不同的性别给出不同的推荐
    适配器模式(数据库方面)支持不同的数据库连接
    php的三种设计模式
    UnexpectedRollbackException: Transaction rolled back because it has been marked as rollback-only解决办法
    SQL语句如何在同一个表内复制一条记录
  • 原文地址:https://www.cnblogs.com/xiao987334176/p/10909192.html
Copyright © 2011-2022 走看看