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;
}