00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00024 #ifndef APR_REDIS_H
00025 #define APR_REDIS_H
00026
00027 #include "apr.h"
00028 #include "apr_pools.h"
00029 #include "apr_time.h"
00030 #include "apr_strings.h"
00031 #include "apr_network_io.h"
00032 #include "apr_ring.h"
00033 #include "apr_buckets.h"
00034 #include "apr_reslist.h"
00035 #include "apr_hash.h"
00036
00037 #ifdef __cplusplus
00038 extern "C" {
00039 #endif
00040
00041 #ifndef RC_DEFAULT_SERVER_PORT
00042 #define RC_DEFAULT_SERVER_PORT 6379
00043 #endif
00044
00045 #ifndef RC_DEFAULT_SERVER_MIN
00046 #define RC_DEFAULT_SERVER_MIN 0
00047 #endif
00048
00049 #ifndef RC_DEFAULT_SERVER_SMAX
00050 #define RC_DEFAULT_SERVER_SMAX 1
00051 #endif
00052
00053 #ifndef RC_DEFAULT_SERVER_TTL
00054 #define RC_DEFAULT_SERVER_TTL 600
00055 #endif
00056
00064 typedef enum
00065 {
00066 APR_RC_SERVER_LIVE,
00067 APR_RC_SERVER_DEAD
00068 } apr_redis_server_status_t;
00069
00071 typedef struct apr_redis_conn_t apr_redis_conn_t;
00072
00074 typedef struct apr_redis_server_t apr_redis_server_t;
00075 struct apr_redis_server_t
00076 {
00077 const char *host;
00078 apr_port_t port;
00079 apr_redis_server_status_t status;
00080 #if APR_HAS_THREADS || defined(DOXYGEN)
00081 apr_reslist_t *conns;
00082 #else
00083 apr_redis_conn_t *conn;
00084 #endif
00085 apr_pool_t *p;
00086 #if APR_HAS_THREADS
00087 apr_thread_mutex_t *lock;
00088 #endif
00089 apr_time_t btime;
00090 apr_uint32_t rwto;
00091 struct
00092 {
00093 int major;
00094 int minor;
00095 int patch;
00096 char *number;
00097 } version;
00098 };
00099
00100 typedef struct apr_redis_t apr_redis_t;
00101
00102
00103
00104
00105
00106
00107 typedef apr_uint32_t (*apr_redis_hash_func)(void *baton,
00108 const char *data,
00109 const apr_size_t data_len);
00110
00111
00112
00113
00114
00115 typedef apr_redis_server_t* (*apr_redis_server_func)(void *baton,
00116 apr_redis_t *rc,
00117 const apr_uint32_t hash);
00118
00120 struct apr_redis_t
00121 {
00122 apr_uint32_t flags;
00123 apr_uint16_t nalloc;
00124 apr_uint16_t ntotal;
00125 apr_redis_server_t **live_servers;
00126 apr_pool_t *p;
00127 void *hash_baton;
00128 apr_redis_hash_func hash_func;
00129 void *server_baton;
00130 apr_redis_server_func server_func;
00131 };
00132
00141 APU_DECLARE(apr_uint32_t) apr_redis_hash(apr_redis_t *rc,
00142 const char *data,
00143 const apr_size_t data_len);
00144
00148 APU_DECLARE(apr_uint32_t) apr_redis_hash_crc32(void *baton,
00149 const char *data,
00150 const apr_size_t data_len);
00151
00155 APU_DECLARE(apr_uint32_t) apr_redis_hash_default(void *baton,
00156 const char *data,
00157 const apr_size_t data_len);
00158
00166 APU_DECLARE(apr_redis_server_t *) apr_redis_find_server_hash(apr_redis_t *rc,
00167 const apr_uint32_t hash);
00168
00172 APU_DECLARE(apr_redis_server_t *) apr_redis_find_server_hash_default(void *baton,
00173 apr_redis_t *rc,
00174 const apr_uint32_t hash);
00175
00184 APU_DECLARE(apr_status_t) apr_redis_add_server(apr_redis_t *rc,
00185 apr_redis_server_t *server);
00186
00187
00195 APU_DECLARE(apr_redis_server_t *) apr_redis_find_server(apr_redis_t *rc,
00196 const char *host,
00197 apr_port_t port);
00198
00204 APU_DECLARE(apr_status_t) apr_redis_enable_server(apr_redis_t *rc,
00205 apr_redis_server_t *rs);
00206
00207
00213 APU_DECLARE(apr_status_t) apr_redis_disable_server(apr_redis_t *rc,
00214 apr_redis_server_t *rs);
00215
00230 APU_DECLARE(apr_status_t) apr_redis_server_create(apr_pool_t *p,
00231 const char *host,
00232 apr_port_t port,
00233 apr_uint32_t min,
00234 apr_uint32_t smax,
00235 apr_uint32_t max,
00236 apr_uint32_t ttl,
00237 apr_uint32_t rwto,
00238 apr_redis_server_t **ns);
00246 APU_DECLARE(apr_status_t) apr_redis_create(apr_pool_t *p,
00247 apr_uint16_t max_servers,
00248 apr_uint32_t flags,
00249 apr_redis_t **rc);
00250
00261 APU_DECLARE(apr_status_t) apr_redis_getp(apr_redis_t *rc,
00262 apr_pool_t *p,
00263 const char* key,
00264 char **baton,
00265 apr_size_t *len,
00266 apr_uint16_t *flags);
00267
00276 APU_DECLARE(apr_status_t) apr_redis_set(apr_redis_t *rc,
00277 const char *key,
00278 char *baton,
00279 const apr_size_t data_size,
00280 apr_uint16_t flags);
00281
00291 APU_DECLARE(apr_status_t) apr_redis_setex(apr_redis_t *rc,
00292 const char *key,
00293 char *baton,
00294 const apr_size_t data_size,
00295 apr_uint32_t timeout,
00296 apr_uint16_t flags);
00297
00304 APU_DECLARE(apr_status_t) apr_redis_delete(apr_redis_t *rc,
00305 const char *key,
00306 apr_uint32_t timeout);
00307
00314 APU_DECLARE(apr_status_t) apr_redis_version(apr_redis_server_t *rs,
00315 apr_pool_t *p,
00316 char **baton);
00317
00324 APU_DECLARE(apr_status_t) apr_redis_info(apr_redis_server_t *rs,
00325 apr_pool_t *p,
00326 char **baton);
00327
00335 APU_DECLARE(apr_status_t) apr_redis_incr(apr_redis_t *rc,
00336 const char *key,
00337 apr_int32_t inc,
00338 apr_uint32_t *new_value);
00346 APU_DECLARE(apr_status_t) apr_redis_decr(apr_redis_t *rc,
00347 const char *key,
00348 apr_int32_t inc,
00349 apr_uint32_t *new_value);
00350
00351
00356 APU_DECLARE(apr_status_t) apr_redis_ping(apr_redis_server_t *rs);
00357
00368 APU_DECLARE(apr_status_t) apr_redis_multgetp(apr_redis_t *rc,
00369 apr_pool_t *temp_pool,
00370 apr_pool_t *data_pool,
00371 apr_hash_t *values);
00372
00373 typedef enum
00374 {
00375 APR_RS_SERVER_MASTER,
00376 APR_RS_SERVER_SLAVE,
00377 APR_RS_SERVER_UNKNOWN
00378 } apr_redis_server_role_t;
00379
00380 typedef struct
00381 {
00382
00384 apr_uint32_t major;
00386 apr_uint32_t minor;
00388 apr_uint32_t patch;
00390 apr_uint32_t process_id;
00392 apr_uint32_t uptime_in_seconds;
00394 apr_uint32_t arch_bits;
00395
00396
00398 apr_uint32_t connected_clients;
00400 apr_uint32_t blocked_clients;
00401
00402
00404 apr_uint64_t maxmemory;
00406 apr_uint64_t used_memory;
00408 apr_uint64_t total_system_memory;
00409
00410
00412 apr_uint64_t total_connections_received;
00414 apr_uint64_t total_commands_processed;
00416 apr_uint64_t rejected_connections;
00418 apr_uint64_t total_net_input_bytes;
00420 apr_uint64_t total_net_output_bytes;
00422 apr_uint64_t keyspace_hits;
00424 apr_uint64_t keyspace_misses;
00425
00426
00428 apr_redis_server_role_t role;
00430 apr_uint32_t connected_slaves;
00431
00432
00434 apr_uint32_t used_cpu_sys;
00436 apr_uint32_t used_cpu_user;
00437
00438
00440 apr_uint32_t cluster_enabled;
00441 } apr_redis_stats_t;
00442
00449 APU_DECLARE(apr_status_t) apr_redis_stats(apr_redis_server_t *rs,
00450 apr_pool_t *p,
00451 apr_redis_stats_t **stats);
00452
00455 #ifdef __cplusplus
00456 }
00457 #endif
00458
00459 #endif