redis系列-redis的连接

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):;
原文地址:https://www.cnblogs.com/whuqin/p/4981996.html