python 操作redis集群

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单例模式,是一样的。

这里就不一一演示了

posted @ 2019-05-23 11:46 肖祥 阅读( …) 评论( …) 编辑 收藏

)

你可能感兴趣的:(java,java,后端)