python操作redis集群、redis主从+哨兵

发布时间 2023-07-17 15:34:54作者: 蕝戀

主从+哨兵

from redis.sentinel import Sentinel

if __name__ == '__main__':
    # 哨兵监听的别名,这个就是你redis配置中的名字
    server_name = "mymaster"

    # 设置哨兵组的IP和PORT
    sentinel_list = [
        ("192.168.2.6", 26379),
        ("192.168.2.6", 26380),
        ("192.168.2.6", 26381),
    ]
    # 初始化哨兵对象,并传递哨兵组的IP和端口信息
    sentinel = Sentinel(sentinel_list)

    # print(sentinel.discover_slaves(server_name))
    # print(sentinel.discover_master(server_name))

    # 从哨兵监视中获取master主库
    master_client = sentinel.master_for(server_name, decode_responses=True)

    # 从哨兵监视中获取slave从库
    slave_client = sentinel.slave_for(server_name, decode_responses=True)

    # 主库中设置值
    master_client.set("username", "wangwu")

    # 从库中获取值
    print(slave_client.get("username"))

集群

from redis.cluster import ClusterNode

if __name__ == '__main__':
    from redis import RedisCluster

    # nodes = [
    #     {"host": "192.168.2.6", "port": 6382},
    #     {"host": "192.168.2.6", "port": 6383},
    #     {"host": "192.168.2.6", "port": 6384},
    #     {"host": "192.168.2.6", "port": 6385},
    # ]

    """
    S: 1bf7272d2b929d7a7d5080bfabfcdc1e2dee5dde 192.168.2.6:6379
    S: 2553f886f985b64357d70cb581cb90206fd356e0 192.168.2.6:6380
    S: 82170a4b12bb428469ee23f36b6c3b9aea14e65a 192.168.2.6:6381
    M: fd85e7db8bcb89dd572bda08d832817515d74dc3 192.168.2.6:6382
    M: 533580d3b0f60fe474d60439fff61536ba57b90e 192.168.2.6:6383
    M: cbf4151ce9ca40fa8eea60c6242d5020c31829ce 192.168.2.6:6384
    M: 6c220055c3c79f45443e388056b2ede17879d48a 192.168.2.6:6385
    """

    # 可以将全部节点的信息都给定一个列表中
    # 现在新版要求传的是ClusterNode对象了
    nodes = [
        ClusterNode("192.168.2.6", port=6382),
        ClusterNode("192.168.2.6", port=6383),
        ClusterNode("192.168.2.6", port=6384),
        ClusterNode("192.168.2.6", port=6385),
        ClusterNode("192.168.2.6", port=6379),
        ClusterNode("192.168.2.6", port=6380),
        ClusterNode("192.168.2.6", port=6381),
    ]
    
    # 可以给定全部集群中的机器IP信息
    cluster = RedisCluster(startup_nodes=nodes, decode_responses=True)

    # 也可以随便指定一个节点(不管主从都可以,它会自动定位)
    cluster = RedisCluster(host="192.168.2.6",port=6379, decode_responses=True)
    cluster.set("test001", "哈哈哈哈")

    # print(cluster.get("test001").decode())
    print(cluster.get("test001"))