hiredis是Redis官方推荐的基于C接口的客户端组件,它提供接口,供c语言调用以操作数据库。
进入Redis的源码包的deps/hiredis
make
make install
ldconfig #使动态库在系统中更新生效
#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
#include <stdio.h> #include <stdlib.h> #include <assert.h> #include <hiredis/hiredis.h> int main() { redisContext * rc = redisConnect("127.0.0.1",6379); assert(rc != NULL); char* com = "hmset user name jack age 18 sex male height 180"; redisReply* res =(redisReply*)redisCommand(rc,com); if(res->type == REDIS_REPLY_STATUS) { printf("Success %s\n",res->str); } else printf("fail\n"); com = "hgetall user"; res = (redisReply*)redisCommand(rc,com); if(res->type == REDIS_REPLY_ARRAY) { for(int i = 0; i < res->elements; i++) { if(i%2 != 0) printf("%s\n",res->element[i]->str); else printf("%s",res->element[i]->str); } } else if(res->type == REDIS_REPLY_STRING) { printf("%s",res->str); } freeReplyObject(res); redisFree(rc); return 1; }