hiredis的使用

hiredis的使用Hiredis 是一个 Redis 的 C 客户端库函数 基本实现了 Redis 的协议的最小集 这里对 hiredis 的 api 作基本的介绍以及应用 主要参考 hiredis 的 README 文件以及相关源码 1 hiredis 的安装官网 https redislabs com lp hiredis 发行版本 https github com redis hiredis releases 目前最新的版本 https codeload github com redis hiredis tar gz v0 14

Hiredis是一个Redis的C客户端库函数,基本实现了Redis的协议的最小集。这里对hiredis的api作基本的介绍以及应用,主要参考hiredis的README文件以及相关源码。

1. hiredis的安装

也可以直接将文件编译到自己的工程代码。

2. 同步API接口的使用

/连接数据库*/ redisContext *redisConnect(const char *ip, int port); /发送命令请求*/ void *redisCommand(redisContext *c, const char *format, ...); void *redisCommandArgv(redisContext *c, int argc, const char **argv, const size_t *argvlen); void redisAppendCommand(redisContext *c, const char *format, ...); void redisAppendCommandArgv(redisContext *c, int argc, const char **argv, const size_t *argvlen); /*释放资源*/ void freeReplyObject(void *reply); void redisFree(redisContext *c); 

2.1连接redis数据库redisConnect

函数原型

redisContext *redisConnect(const char *ip, int port); 

参数说明

返回值

返回值是一个指向redisContext对象,可以不用了解这个对象的具体组成部分,只需要知道怎么使用就可以了。下面是其定义。

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 */ enum redisConnectionType connection_type; struct timeval *timeout; struct { 
    char *host; char *source_addr; int port; } tcp; struct { 
    char *path; } unix_sock; } redisContext; 

使用例子

redisContext *c = redisConnect("127.0.0.1", 6379); if (c == NULL || c->err) { 
    if (c) { 
    printf("Error: %s\n", c->errstr); // handle error } else { 
    printf("Can't allocate redis context\n"); } } 

这个redisContext不是一个线程安全的对象,也就是说,多个线程同时访问这一个对象可能会出现问题。

2.2 发送需要执行的命令redisCommand

发送命令函数原型

redisCommand

void *redisCommand(redisContext *c, const char *format, ...); 

参数说明

返回值

/* This is the reply object returned by redisCommand() */ typedef struct redisReply { 
    /*命令执行结果的返回类型*/ int type; /* REDIS_REPLY_* */ /*存储执行结果返回为整数*/ long long integer; /* The integer when type is REDIS_REPLY_INTEGER */ /*字符串值的长度*/ size_t 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; 

返回结果的类型reply->type,reply 为redisReply* 类型。

  • REDIS_REPLY_STRING == 1:返回值是字符串,字符串储存在redis->str当中,字符串长度为redis->len。
  • REDIS_REPLY_ARRAY == 2:返回值是数组,数组大小存在redis->elements里面,数组值存储在redis->element[i]里面。数组里面存储的是指向redisReply的指针,数组里面的返回值可以通过redis->element[i]->str来访问,数组的结果里全是type==REDIS_REPLY_STRING的redisReply对象指针。
  • REDIS_REPLY_INTEGER == 3:返回值为整数 long long。
  • REDIS_REPLY_NIL==4:返回值为空表示执行结果为空。
  • REDIS_REPLY_STATUS ==5:返回命令执行的状态,比如set foo bar 返回的状态为OK,存储在str当中 reply->str == “OK”。
  • REDIS_REPLY_ERROR ==6 :命令执行错误,错误信息存放在 reply->str当中。

redisCommandArgv函数

函数原型

void *redisCommandArgv(redisContext *c, int argc, const char **argv, const size_t *argvlen); 

参数说明

char hkey[] = ""; char hset[] = "hset"; char key[] = "testkey"; char hvalue[] = "3210"; int argc = 4; char *argv[] = { 
   hset,key,hkey,hvalue}; size_t argvlen[] = { 
   4,6,4,3}; redisCommandArgv(context,argc,argv,argvlen); 

redisAppendCommand*函数支持管道命令

函数原型:

void redisAppendCommand(redisContext *c, const char *format, ...); void redisAppendCommandArgv(redisContext *c, int argc, const char **argv, const size_t *argvlen); int redisGetReply(redisContext *context,redisReply** reply); 

参数说明:

使用例子:

redisReply *reply; /*添加命令set */ redisAppendCommand(context,"SET foo bar"); /*添加命令get */ redisAppendCommand(context,"GET foo"); /*获取set命令结果*/ redisGetReply(context,&reply); // reply for SET freeReplyObject(reply); /*获取get命令结果*/ redisGetReply(context,&reply); // reply for GET freeReplyObject(reply); 

2.3 释放资源

函数原型

void freeReplyObject(void *reply); void redisFree(redisContext *c); 

参数说明


版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/202811.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月19日 下午11:15
下一篇 2026年3月19日 下午11:15


相关推荐

  • 实验室设备管理系统C语言——课程设计实习「建议收藏」

    实验室设备管理系统C语言——课程设计实习「建议收藏」本题目将建立一个实验室设备管理系统,记录实验室所有的实验设备,并及时反响设备的运转状况,使用情况,设备购进以后及时记录设备相关信息,对彻底损坏的设备进行报废,维修的设备信息及有更改信息的设备进行统计,解决人工管理系统没解决的问题以及实现对用户更方便的功能,对由严重问题故障的要及时修理,并记录修理日期、设备名、编号、修理厂家、修理费用、责任人等新设备购入后要立即进行设备登记,包括类别、设备名、编号、型号、规格、单价、数量、购置日期、生产厂家保质期和经办人等信息。随时对现有设备及其修理、报废情况进行统计。

    2022年10月13日
    5
  • wing是什么_acwing是什么

    wing是什么_acwing是什么原题链接设有 N×N 的方格图,我们在其中的某些方格中填入正整数,而其它的方格中则放入数字0。如下图所示:某人从图中的左上角 A 出发,可以向下行走,也可以向右行走,直到到达右下角的 B 点。在走过的路上,他可以取走方格中的数(取走后的方格中将变为数字0)。此人从 A 点到 B 点共走了两次,试找出两条这样的路径,使得取得的数字和为最大。输入格式第一行为一个整数N,表示 N×N 的方格图。接下来的每行有三个整数,第一个为行号数,第二个为列号数,第三个为在该行、该列上所放的数。行和列编号从

    2022年8月8日
    5
  • C语言中fprintf_c语言gets函数用法

    C语言中fprintf_c语言gets函数用法c语言中fprintf函数C中的fprintf()函数(fprintf()functioninC)Prototype:原型:intfprintf(FILE*filename,constchar*string,….);Parameters:参数:FILE*filename,constchar*stringetc….

    2022年8月30日
    6
  • 2025最全Supabase MCP使用指南:一键连接AI助手与数据库【实战教程】

    2025最全Supabase MCP使用指南:一键连接AI助手与数据库【实战教程】

    2026年3月15日
    2
  • lena图像下载「建议收藏」

    lena图像下载「建议收藏」 http://www.ece.rice.edu/~wakin/images/

    2022年6月19日
    25
  • vue使用echarts引用示例

    vue使用echarts引用示例ECharts 支持多种下载方式 从 GitHub 获取 从 npm 获取 从 CDN 获取从 npm 获取 npminstallec 从 CDN 获取推荐从 jsDelivr 引用 echarts 从 GitHub 获取 apache echarts 项目的 release 页面可以找到各个版本的链接 点击下载页面下方 Assets 中的 Sourcecode 解压后 dist 目录下的 echarts js 即为包含完整 ECharts 功能的文件

    2026年3月16日
    2

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号