zoukankan      html  css  js  c++  java
  • 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):;
    
  • 相关阅读:
    struts2的核心和工作原理
    JAVA NIO学习笔记1
    [深入JUnit] 测试运行的入口
    阿里巴巴最新开源项目
    数据库进阶之路(五)
    flutter 常用plugins
    小程序 自定义组件 并实现组件间通讯
    小程序 背景叠阴影
    小程序 navigateTo传对象参数
    小程序 解决同行cell中 多点击事件冲突
  • 原文地址:https://www.cnblogs.com/whuqin/p/4981996.html
Copyright © 2011-2022 走看看