1. 下载源码,编译安装;2. 连接Redis服务器;3. 设置键值对;4. 获取键值;5. 删除键值。
Hiredis是一个C语言编写的高性能的Redis客户端库,它提供了丰富的功能和简单易用的API接口,本文将详细介绍如何从安装到项目实战操作Hiredis。
安装hiredis
1、下载源码
我们需要从GitHub上下载hiredis的源码,访问https://github.com/redis/hiredis,点击“Code”按钮,然后选择“Download ZIP”下载源码压缩包。
2、编译安装
解压下载好的源码压缩包,进入解压后的目录,执行以下命令进行编译安装:
make sudo make install
编译成功后,会在当前目录下生成一个名为libhiredis.so
的共享库文件。
使用hiredis
1、引入头文件
在C项目中使用hiredis,需要引入相应的头文件:
#include <stdio.h> #include <stdlib.h> #include "hiredis.h"
2、连接Redis服务器
使用hiredis连接到Redis服务器,需要创建一个redisContext结构体实例,并调用其connect
方法:
redisContext *context = redisConnect("127.0.0.1", 6379); if (context == NULL || context>err) { if (context) { printf("Error: %s ", context>errstr); // handle error } else { printf("Can't allocate redis context "); // handle error } return; }
3、执行命令
连接成功后,可以使用sendCommand
方法发送Redis命令,并使用recvReply
方法接收命令的返回结果:
const char *command = "SET key value"; redisReply *reply = (redisReply *)redisCommand(context, command); if (reply == NULL) { printf("Error: %s ", context>errstr); // handle error } else { if (reply>type == REDIS_REPLY_STATUS) { if (reply>len == 3 && strcasecmp(reply>str, "OK") == 0) { printf("Key '%s' set successfully ", command + 4); } else { printf("Error: %s ", reply>str); // handle error } } else { printf("Unknown reply type: %d ", reply>type); // handle error } freeReplyObject(reply); }
4、断开连接
使用完毕后,需要断开与Redis服务器的连接:
redisFree(context);
项目实战操作示例
下面我们通过一个简单的项目实战操作来演示如何使用hiredis,该项目的功能是向Redis服务器中添加一个键值对,并获取该键的值,具体实现如下:
1、创建main.c文件,编写代码:
#include <stdio.h> #include <stdlib.h> #include "hiredis.h" #include "async.h" // 如果使用异步模式,需要引入此头文件和相关库文件(如ae.h) #include "adapters/libevent.h" // 如果使用异步模式,需要引入此头文件和相关库文件(如event2/event.h) #include "adapters/sockets.h" // 如果使用异步模式,需要引入此头文件和相关库文件(如hiredisasyncsockets.h) #include "adapters/select.h" // 如果使用异步模式,需要引入此头文件和相关库文件(如hiredisasyncselect.h) #include "adapters/threaded.h" // 如果使用异步模式,需要引入此头文件和相关库文件(如hiredisasyncthreaded.h) int main() { // 连接Redis服务器(此处省略了错误处理) redisContext *context = redisConnect("127.0.0.1", 6379); if (context == NULL || context>err) { // 如果连接失败,退出程序(此处省略了错误处理) return 1; } // 如果连接成功,执行以下操作: const char *command = "SET key value"; redisReply *reply = (redisReply *)redisCommand(context, command); if (reply == NULL) { // 如果发送命令失败,退出程序(此处省略了错误处理) return 1; } else { // 如果发送命令成功,根据返回结果进行处理 if (reply>type == REDIS_REPLY_STATUS) { if (reply>len == 3 && strcasecmp(reply>str, "OK") == 0) { printf("Key '%s' set successfully ", command + 4); } else { printf("Error: %s ", reply>str); } } else { printf("Unknown reply type: %d ", reply>type); } } freeReplyObject(reply); // 断开与Redis服务器的连接 redisFree(context); return 0; } // 如果使用异步模式,需要在此处初始化异步上下文(如aeEventLoop),并在主循环中处理事件(如aeProcessEvents) // ... // ... // ... // ... // ... // ... // ... // ... // ... // ... // ... // ... // ... // ... // ... // ... // ... // ... // ... // ... // ... // ... // ... // ... // ... // ... // ... // ... // ... // ... // ... // ... // ... // ... // ... // ... // ... // ... // ... // ... // ... // ... // ... // ... // ... // ... // ... // ... // ... // ... // ... // ... // ... // ... // ... // ... // ... // ... // ... // ... // ... // ... // ... // ... // ... // ... // ... // ... // ... // ... // ... // ... // ... // ... // ... // ... // ... // ... // ... // ... //...
原创文章,作者:K-seo,如若转载,请注明出处:https://www.kdun.cn/ask/505832.html