重启后重新连接到 Redis
Posted
技术标签:
【中文标题】重启后重新连接到 Redis【英文标题】:Reconnection to Redis after reboot 【发布时间】:2013-08-09 01:14:12 【问题描述】:我有一堆长时间运行的进程连接到 Redis 服务器(使用 Jedis)。只要我不重新启动运行 Redis 的机器或重新启动 Redis 服务器,一切正常。一旦我重新启动或重新启动,连接就会丢失。在 Redis/Jedis 中是否有处理这个用例的标准方法,还是我需要自己把这个逻辑放在我所有的客户中?
【问题讨论】:
【参考方案1】:Redis 失败/连接断开
在这种情况下,当您的进程保持活动状态时,redis 会关闭或断开连接。为确保进程获得良好的连接,请在 jedis 连接/池配置中使用 testOnBorrow=true
。 Jedis 会在使用前用‘PING’测试每个连接;如果redis没有响应,连接被丢弃,它会尝试另一个连接。
机器重启/重启(不是 redis) 如果应用程序节点失败或重新启动,您的“进程”应该配置为在重新启动时自动重新启动(如果这是您想要的行为),或者有人手动启动它。在任何一种情况下,我都希望您的进程在它执行任何实际工作之前创建和初始化一个新的绝地连接......那么除此之外您还需要什么?
【讨论】:
通过“您的进程在执行任何实际工作之前创建并初始化一个新的绝地连接,对吗?”你的意思是如果 Redis 客户端进程每次想要在 Redis 上做某事时都从 RedisPool 获取新资源? 是的,没错。如果客户端节点重启,jedis pool会自动重新初始化,你的进程肯定已经在做那部分了吧? 否,客户端节点不会重新启动。 Redis 服务器因 Redis 物理节点硬重启而重启。 JedisPool(在客户端)还会重新初始化吗? 我们已经在这个场景中测试了绝地池; redis恢复后重新连接,没有问题。我们使用testOnBorrow=true
,其余设置默认。以上是关于重启后重新连接到 Redis的主要内容,如果未能解决你的问题,请参考以下文章
服务器重新启动后重新连接到 QDBus 服务器 (Qt C++)