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')

就优化而言,请查看源代码中 中的 twiceredis 定义中的docstring。 pool_args sentinel_args 的默认参数被定义为便于根据需要更改特定参数。主要是超时和tcp keepalive,但是每个环境都不同,所以我的默认值可能在你的环境中不起作用。下面是调整的示例:

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)

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java Maven无法识别安装在Ubuntu外壳上的$java_HOME jdk   java如何防止可运行程序在其中一个抛出异常时执行   java Listview在按下项时不触发   如何在WindowsPhone8中使用JavaRESTWebService?   java在spring引导下使用多个dispatcher servlet/web上下文   java为什么在删除容器的绝对大小时不绘制GEF子项?   java在hibernate实体中保留DB约束是好的   JavaSpring选择最高优先级bean   ArrayList<Class>java字符串[]   有向加权边图的Java邻接表实现   字母数字字符串的java Tesseract配置:混合2、Z、6和G   如果输入为空,则带有EditText的java警报对话框将关闭   jsp上的java Struts 2动作响应   java获取IndexOutOfBundException Android   scala AWSJAVASDK:解压缩大小必须小于262144000字节