Redis 是完全开源免费的,遵守BSD协议,先进的key - value持久化产品。它通常被称为数据结构服务器,因为值(value)可以是 字符串(String), 哈希(Map), 列表(list), 集合(sets) 和 有序集合(sorted sets)等类型。
redis客户端连接比较简单,但日常中redis的使用和维护会有很多地方需要学习。本文只简单介绍下常用函数。
//hiredis/hiredis.h /* Context for a connection to Redis */ typedef struct redisContext { int err; /* Error flags, 0 when there is no error */ char errstr[128]; /* String representation of error when applicable */ int fd; int flags; char *obuf; /* Write buffer */ redisReader *reader; /* Protocol reader */ } redisContext; /* This is the reply object returned by redisCommand() */ #define REDIS_REPLY_STRING 1 #define REDIS_REPLY_ARRAY 2 #define REDIS_REPLY_INTEGER 3 #define REDIS_REPLY_NIL 4 #define REDIS_REPLY_STATUS 5 #define REDIS_REPLY_ERROR 6 typedef struct redisReply { int type; /* REDIS_REPLY_* */ long long integer; /* The integer when type is REDIS_REPLY_INTEGER */ int len; /* Length of string */ char *str; /* Used for both REDIS_REPLY_ERROR and REDIS_REPLY_STRING */ size_t elements; /* number of elements, for REDIS_REPLY_ARRAY */ struct redisReply **element; /* elements vector for REDIS_REPLY_ARRAY */ } redisReply; redisContext *redisConnectWithTimeout(const char *ip, int port, struct timeval tv); void redisFree(redisContext *c); //Issue a command to Redis, NULL if error, otherwise reply void *redisCommand(redisContext *c, const char *format, ...); /* Function to free the reply objects hiredis returns by default. */ void freeReplyObject(void *reply);
应用实例:
#include "hiredis/hiredis.h" redisContext* context = NULL; redisReply* reply = NULL; int retry = 0; while (retry < 5) { reply != NULL ? freeReplyObject(reply):; context != NULL ? redisFree(context):; context = redisConnect("127.0.0.1", 8600); if (NULL == context || context->err != 0) { cout << "connect err" << endl; continue; } redisReply* reply = (redisReply*)redisCommand(context, "%s", "set name John"); if (NULL == reply || reply == REDIS_REPLY_ERROR) { cout << "exe command fail" << endl; continue; } cout << "ok" << endl; } reply != NULL ? freeReplyObject(reply):; context != NULL ? redisFree(context):;