美文网首页
[python]操作redis sentinel以及cluste

[python]操作redis sentinel以及cluste

作者: LeeYunFeng | 来源:发表于2017-07-28 18:27 被阅读0次

    先了解清楚sentinel和cluster的差别,再学习使用python操作redis的API,感觉会更加清晰明白。

    1、redis sentinel和cluster的区别

    sentinel遵循主从结构。最小的sentinel会有一个master节点和两个slave节点,三个节点上均有sentinel守护进程在运行。当master挂掉时,会由其余节点投票产生新的master;但是当多数节点都不可用时,例如:三个节点中有两个节点不可用,则failover失败。

    数据存储时,master节点负责管理数据,因此所有的写操作均要通过master节点。

    cluster则是平行结构。可以理解为是全部N个节点都是相同的replicas,其中有1个replica作为master,其余N-1个同样的节点作为slave。当master挂掉时,cluster会自动指定新的master。

    数据存储时,cluster使用哈希槽来进行数据的统一管理,写操作无需通过master操作。

    二者的区别如下:

    1)sentinel的多数节点挂掉时,failover失败;而cluster在这种情况依然能够正常failover。

    2)sentinel需要通过master定位数据所在节点,通过master写入;而cluster统一管理和写入数据。

    2、python操作sentinel和cluster实例

    关键是搞清楚使用的库和sentinel、cluster的操作流程。

    操作sentinel,向集合中写入数据:

    from redis.sentinel import Sentinel

    # 创建sentinel对象

    rs = Sentinel([('localhost', 26379)], socket_timeout=0.1)

    # 指定redis实例名为ux_exp

    # 创建到master的连接,用于写操作

    master = rs.master_for('ux_exp', socket_timeout=0.1)

    # 写入数据xxx到16001_top集合

    master.sadd('16001_top', 'xxxx')

    # 随机读取一个16001_top集合的一个元素

    master.srandmember('16001_top',2)

    操作cluster,向redis中写入键-值对:

    from rediscluster import StrictRedisCluster

    # 配置信息

    startup_nodes = [{"host": "127.0.0.1", "port": "7000"}]

    # 创建cluster对象

    rc = StrictRedisCluster(startup_nodes=startup_nodes, decode_responses=True)

    # 插入数据

    rc.set("foo", "bar")

    # 读取数据

    print(rc.get("foo"))

    总结,先搞清楚sentinel和cluster的基本原理,才能比较容易的使用python进行相应的操作。

    相关文章

      网友评论

          本文标题:[python]操作redis sentinel以及cluste

          本文链接:https://www.haomeiwen.com/subject/ajuflxtx.html