hiredis

hiredis是Redis官方推荐的基于C接口的客户端组件,它提供接口,供c语言调用以操作数据库。

//头文件
#include <hiredis/hiredis.h>

//连接redis数据库,参数为ip地址和端口号,默认端口6379.该函数返回一个redisContext对象
redisContext *redisConnect(const char *ip, int port);

//执行redis命令,返回redisReply对象
void *redisCommand(redisContext *c, const char *format, ...);

//释放redisCommand执行后返回的RedisReply对象
void freeReplyObject(void *reply);

//断开redisConnect所产生的连接
void redisFree(redisContext *c);

//redisReply对象结构如下:
typedef struct redisReply
{
	int type; // 返回结果类型
	long long integer; // 返回类型为整型的时候的返回值
	size_t len; // 字符串的长度
	char *str; // 返回错误类型或者字符串类型的字符串
	size_t elements; // 返回数组类型时,元素的数量
	struct redisReply **element; // 元素结果集合
}redisReply;

//返回类型有以下几种:
REDIS_REPLY_STRING   1   //字符串
REDIS_REPLY_ARRAY    2   //数组,多个reply,通过element数组以及elements数组大小访问
REDIS_REPLY_INTEGER  3   //整型
REDIS_REPLY_NIL      4   //空,没有数据
REDIS_REPLY_STATUS   5   //状态,str字符串以及len
REDIS_REPLY_ERROR    6   //错误,同STATUS

C程序操作Redis代码示例:

#include <hiredis/hiredis.h>
#include <stdio.h>
#include <string.h>
#include <unistd.h>
#include <assert.h>
#include <stdlib.h>


int main()
{
    //连接redis
    redisContext *c  = redisConnect("127.0.0.1", 6379);  
    assert(c != NULL);

    //要执行的redis命令
    char * com = "hmset user:1 name wangjiaxin age 21";  

    //执行命令
    redisReply * r = (redisReply*)redisCommand(c, com);  
    assert(r != NULL);

    //执行命令后获得的结果集的类型
    if(r->type == REDIS_REPLY_STATUS) 
    {
        printf("%s\n", r->str);
        printf("success\n");
    }
    else
    {
        printf("fail\n");
    }

    com = "hgetall user:1";
    r = (redisReply*)redisCommand(c, com);

    if(r->type == REDIS_REPLY_ARRAY)  //数组,多个reply,通过element数组以及elements数组大小访问
    {
        int i = 0;
        for(; i < r->elements; ++i)
        {
            if((i+1) % 2 == 0)
            {
                printf("%s\n", r->element[i]->str);
            } 
            else
            {
                printf("%s ", r->element[i]->str);
            }
        }
    }        
    freeReplyObject(r); // 释放redisReply对象
    redisFree(c); // 断开连接
    return 0;
}

在这里插入图片描述

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐