一、hiredis源码安装说明
本文创作基于
hiredis - v1.2.0版本
1.简介
- hiredis是一个用于与Redis交互的C语言客户端库。它提供了一组简单易用的API,使开发人员可以轻松地连接到Redis服务器,并执行各种操作,如设置和获取键值对、执行命令、订阅和发布消息等。
- hiredis的设计目标是高效性和简单性。它使用纯C语言编写,没有外部依赖,可以轻松地与任何C/C++项目集成。它具有轻量级的实现和低延迟的性能,适用于高并发的应用场景。
- hiredis支持同步和异步的方式与Redis进行通信。同步方式是指客户端发送一个命令后会一直等待Redis的响应,直到响应返回后才继续执行下一个命令。异步方式是指客户端发送命令后可以继续执行其他任务,通过回调函数来处理Redis的响应。
- 除了基本的Redis操作,hiredis还提供了一些高级功能,如管道操作和事务。管道操作允许一次性发送多个命令到Redis,以减少网络开销。事务可以将一系列命令打包成一个原子操作,保证它们的执行是连续的。
总之,hiredis是一个简单、高效的C语言客户端库,使开发人员可以轻松地与Redis进行交互。它适用于任何需要与Redis集成的C/C++项目,并且具有良好的性能和灵活性。
2.下载源码
hiredis官网:https://redis.io/lp/hiredis/
hiredis github:https://github.com/redis/hiredis/releases
3.安装说明
# 下载软件包,解压并移动目标位置
[root@Ali ~]# wget https://github.com/redis/hiredis/archive/refs/tags/v1.2.0.tar.gz
[root@Ali ~]# tar xzvf v1.2.0.tar.gz
[root@Ali ~]# mv hiredis-1.2.0 /usr/local/redis/hiredis
# 安装依赖
[root@Ali hiredis]# yum install openssl-devel -y
# 编译安装 hiredis
[root@Ali hiredis]# make
[root@Ali hiredis]# make install
mkdir -p /usr/local/include/hiredis /usr/local/include/hiredis/adapters /usr/local/lib
cp -pPR hiredis.h async.h read.h sds.h alloc.h sockcompat.h /usr/local/include/hiredis
cp -pPR adapters/*.h /usr/local/include/hiredis/adapters
cp -pPR libhiredis.so /usr/local/lib/libhiredis.so.1.1.0
cd /usr/local/lib && ln -sf libhiredis.so.1.1.0 libhiredis.so && ln -sf libhiredis.so.1.1.0 libhiredis.so.1
cp -pPR libhiredis.a /usr/local/lib
mkdir -p /usr/local/lib/pkgconfig
cp -pPR hiredis.pc /usr/local/lib/pkgconfig
可以看到,
make install
成功后:
- hiredis头文件 安装放在
/usr/local/include/hiredis
- 库文件放在
/usr/local/lib/
目录下adapters
注意
- 使用上述编译生成的so不支持
SSL
,若想支持SSL
需要再编译增加USE_SSL=1
参数,如:make USE_SSL=1 && make install USE_SSL=1
【参考 hiredis-README】
二、hiredis 使用说明
值得说明的是:hiredis
支持 同步
和 异步
两种调用方式。无论同步还是异步,使用hiredis
基本流程都是以下三个步骤:
- 使用
redisConnect
连接数据库 - 使用
redisCommand
执行命令 - 释放对象: 使用
freeReplyObject
释放redisReply
对象,使用redisFree
来释放redisContext
。
1. 简单示例
本小节以一个最简单的 同步API调用
示例,帮助读者建立API使用的整体过程。
一个最简单的API调用为例,至少需要引入以下几个函数:
/* 创建一个redis链接,并返回一个redis上下文 */
redisContext *redisConnect(const char *ip, int port);
/* 执行redis操作命令 */
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);
示例代码:
#include <stdio.h>
#include <string.h>
#include <hiredis/hiredis.h>
int main(){
redisReply *lpReply = nullptr;
redisContext *lpContext = nullptr;
/* 创建一个redis链接 */
lpContext = redisConnect("127.0.0.1", 6379);
if (lpContext == NULL || lpContext->err) {
if (lpContext) {
printf("Error: %s\n", lpContext->errstr);
// handle error
} else {
printf("Can't allocate redis context\n"