从redis pub / sub中的连接断开中恢复

时间:2012-11-30 22:42:09

标签: python redis redistogo

我正在运行连接到redis数据库的客户端。客户端使用WiFi连接,有时会断开连接。不幸的是,当发生这种情况时,程序会一直运行而不会抛出任何类型的警告。

r = redis.StrictRedis(host=XX, password=YY...)
ps = r.pubsub()
ps.subscribe("12345")
for items in ps.listen():
    if items['type'] == 'message':
       data = items['data']

理想情况下,我正在寻找的是在连接丢失时捕获事件,尝试重新建立连接,执行一些纠错,然后重新启动并运行。这应该在python程序中完成吗?我应该有一个外部看门狗吗?

2 个答案:

答案 0 :(得分:1)

不幸的是,必须“ping”Redis以检查它是否可用。如果您尝试将值放入Redis存储,则会在连接丢失时引发ConnectionError异常。但是当连接丢失时,listen()生成器不会自动关闭。

我认为攻击Redis的连接池可以提供帮助,试一试。

P.S。 In在不受信任的网络环境中连接到redis是非常不安全的。

答案 1 :(得分:0)

这是一个古老而古老的问题,但我将自己的一个问题与之联系在一起,并且碰巧又遇到了这个问题。事实证明,redis库中存在一个错误,该错误导致客户端进入无限循环,如果客户端与redis服务器的连接断开,则尝试重新连接。我调试了问题,然后PR'd进行了更改。现在已经很久以前合并了。一旦浮出水面,维护人员还知道存在相同问题的第二个位置。

此问题不再应该发生。

要完全回答这个问题,我不记得自解决此问题以来给出的错误是什么,但是现在返回了一个特定的错误,您可以捕获并重新连接。