您的位置:首页 > 数据库 > Redis

redis系列-redis的连接

2015-10-23 11:00 405 查看
转自:http://blog.csdn.net/whuqin/article/details/17530709

Redis 是完全开源免费的,遵守BSD协议,先进的key - value持久化产品。它通常被称为数据结构服务器,因为值(value)可以是 字符串(String), 哈希(Map), 列表(list), 集合(sets) 和 有序集合(sorted sets)等类型。

redis客户端连接比较简单,但日常中redis的使用和维护会有很多地方需要学习。本文只简单介绍下常用函数。

[cpp] view
plaincopy





//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);

应用实例:

[cpp] view
plaincopy





#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):;
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: