gkres
gkres

Reputation: 716

Reconnecting with hiredis

I'm trying to reconnect to the Redis server on disconnect.

I'm using redisAsyncConnect and I've setup a callback on disconnect. In the callback I try to reconnect with the same command I use at the very start of the program to establish the connection but it's not working. Can't seem to reconnect.

Can anyone help me out with an example?

Upvotes: 1

Views: 4348

Answers (1)

Didier Spezia
Didier Spezia

Reputation: 73226

Managing Redis (re)connections asynchronously is a bit tricky when an event loop is used.

Here is an example implementing a small zset polling daemon connecting to a list of Redis instances, which is resilient to disconnection events. The ae event loop is used (it is the one used by Redis itself).

http://gist.github.com/4149768

Check the following functions:

  • connectCallback
  • disconnectCallback
  • checkConnections
  • reconnectIfNeeded

The main daemon loop does its activity only when the connection is available. Once per second, a second time initiated callback checks if some connections have to be reestablished. We have found this mechanism quite reliable.

Note: error management is crude in this example for brevity sake. Real production code should manage errors in a more graceful way.

One tricky point when dealing with multiple asynchronous connections is the fact there is no user defined contextual data passed as a parameter of the corresponding callbacks. Cleaning the data associated to a connection after a disconnection event can be a bit difficult.

Upvotes: 4

Related Questions