• 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):;
    
  • 相关阅读:
    Android App常规测试内容
    腾讯的专项测试之道
    PyCharm Python迁移项目
    互联网架构的演变
    unittest最详细的解说
    (转)Python开发规范
    Python3.0+Selenium3进行Web自动化遇到的坑
    测试开发之路--英雄迟暮,我心未老
    团队作业9——事后分析(Beta版本)
    团队作业8--测试与发布(Beta阶段)
  • 原文地址:https://www.cnblogs.com/whuqin/p/4981996.html
Copyright © 2020-2023  润新知