sentinel池支持的读写redis客户端
twiceredis的Python项目详细描述
twiceredis
读写sentinel连接池支持的redis客户端 断开Sentinel客户端和Redis客户端的连接
当使用由sentinelconnectionpool支持的redis连接时, 池已初始化为连接到主池或从池。 如果你想读奴隶的书,偶尔读一些 写信给主人。 Twiceredis通过拥有两个客户机来解决这个问题, 一个主一个从:
- tr.master 也别名为 tr.write
- tr.slave 也别名为 tr.read
每个客户端都有一个单独的sentinelconnectionpool支持 初始化为分别连接到主设备或从设备
twiceredis还使用一个disconnectingsentinel类 减少到redis sentinel服务的活动连接数。 一旦主人或 已选择从机
disconnectionsentinel类还过滤了一些从机 比基地哨兵类聪明。除了 确保从机不 sdown 或 odown 确保从机 主链接状态 为"正常"
twiceredis 随机化sentinel列表,以便每个 twiceredis 对象将连接到列表中的随机哨兵,而不是 它们都连接到第一个(只要它有效)。 这种洗牌可能有点多余 断开sentinel,但最坏情况下会减少 哨兵列表中的第一个哨兵
twiceredis还使用了一个名为 disconnectredis 它向所有客户机添加一个 disconnect() 函数 使管理到redis服务的单个连接更容易
用法
fromtwiceredisimportTwiceRedissentinels=[('10.10.10.10',26379),('10.10.10.11',26379),('10.10.10.12',26379)]tr=TwiceRedis('master01',sentinels,'tötes_passowrd')x=tr.slave.get('superkey')tr.master.set('je mange','huehue')x=tr.read.get('nous mangeons')tr.write.del('superkey')
管道也很好,你只需要决定是否需要写 在其中一个过程中,如果需要写入,则使用 tr.master ,否则使用 tr.slave
withtr.master.pipeline()aswpipe:wpipe.set('turle','power')wpipe.set('tr3buchet','tötes')wpipe.execute()
要连接,请获取一个密钥,然后断开连接以减少活动连接
x=tr.slave.get('some key')tr.slave.disconnect()
之后的重新连接将根据需要无缝地进行o/ 你很可能会撞到另一个奴隶
x=tr.slave.get('some other key')
或者如果要断开 tr.master 和 tr.slave , 可以使用tr.disconnect() 。它在两个节点上都调用 disconnect() 。 从客户机和主客户机:
x=tr.slave.get('some key')tr.master.publish('topic',x)tr.disconnect()# ... and later on reconnect seamlesslytr.master.set('some key','le totes!')x=tr.slave.get('some_key')
fromtwiceredisimportTwiceRedissentinels=[('10.10.10.10',26379),('10.10.10.11',26379),('10.10.10.12',26379)]pool_kwargs=TwiceRedis.DEFAULT_POOL_KWARGSpool_kwargs['tcp_keepalive']=Falsesentinel_kwargs=TwiceRedis.DEFAULT_SENTINEL_KWARGSsentinel_kwargs['min_other_sentinels']=2tr=TwiceRedis('master01',sentinels,'tötes_passowrd',pool_kwargs=pool_kwargs,sentinel_kwargs=sentinel_kwargs)