mirror of https://github.com/sipwise/sems.git
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
54 lines
1015 B
54 lines
1015 B
#ifndef _RedisConnectionPool_h_
|
|
#define _RedisConnectionPool_h_
|
|
|
|
#include "hiredis/hiredis.h"
|
|
#include "AmThread.h"
|
|
|
|
#include <string>
|
|
#include <list>
|
|
#include <vector>
|
|
|
|
using std::string;
|
|
using std::list;
|
|
using std::vector;
|
|
|
|
class RedisConnectionPool
|
|
: public AmThread
|
|
{
|
|
|
|
list<redisContext*> connections;
|
|
unsigned int total_connections;
|
|
unsigned int failed_connections;
|
|
AmMutex connections_mut;
|
|
|
|
AmCondition have_active_connection;
|
|
AmCondition try_connect;
|
|
|
|
vector<unsigned int> retry_timers;
|
|
unsigned int retry_index;
|
|
|
|
string redis_server;
|
|
unsigned int redis_port;
|
|
unsigned int max_wait;
|
|
|
|
public:
|
|
RedisConnectionPool();
|
|
~RedisConnectionPool();
|
|
|
|
redisContext* getActiveConnection();
|
|
|
|
void returnConnection(redisContext* c);
|
|
|
|
void returnFailedConnection(redisContext* c);
|
|
|
|
void set_config(string& server, unsigned int port,
|
|
vector<unsigned int> timers, unsigned int max_conn_wait);
|
|
|
|
void add_connections(unsigned int count);
|
|
|
|
void run();
|
|
void on_stop();
|
|
};
|
|
|
|
#endif
|