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第三方库


热门话题
AmazonS3查找从S3forJava下载的压缩文件的MIME类型   java如何使用Selenium在<span>中查找具有特定文本的元素   python如何使用OpenIEDemo生成自定义三元组。由stanfordnlp提供的java   java遇到“方法不适用”编译错误   java如何使用Mockito在Looper中运行的验证代码。getMainLooper?   类Java目录错误   java在已知其他泛型信息时使用原始类型   java connect()和disconnect()在哪里实现?   java使用PDF Box库拆分PDF,生成的PDF几乎与源PDF文件大小相同   java PowerMockito返回错误的对象   java如何找到TIBCO集合消息的字节编码?   java Basic音乐播放器下一步和上一步按钮   添加模块描述符时,java没有名为“entityManagerFactory”的bean可用   java为什么我的代码不是线程安全的?   eclipse java。引用项目中的类的lang.NoClassDefFoundError