Redis C++ 客户端:hiredis 完整使用指南
Redis 是一种流行的内存数据库,常用于缓存、会话管理、消息队列等场景。要从 C++ 应用程序与 Redis 交互,有多种库可供选择,其中最常见且可靠的是 hiredis。这个轻量、快速且稳定的库提供了纯净的 C API,可轻松集成到 C++ 项目中。本文将详细介绍如何安装 hiredis、将其接入项目、执行基本的 Redis 操作以及处理可能的错误。
什么是 hiredis?
hiredis 是 Redis 官方推出的 C 语言客户端,由 Redis 开发团队维护。它支持:
- 同步与异步连接
- 断线自动重连
- 命令流水线(pipelining)
- 二进制数据处理
- 完整支持 Redis 协议(RESP2 和 RESP3)
尽管 hiredis 是用 C 编写的,但它非常适合 C++ 项目:可以将其封装到 RAII 类中,结合现代 C++11/17 惯用法使用,并轻松与其他库配合。
安装 hiredis
最简单的安装方式是通过系统包管理器。不同操作系统的示例:
Ubuntu / Debian
sudo apt updatesudo apt install libhiredis-devmacOS(Homebrew)
brew install hiredisWindows(vcpkg)
vcpkg install hiredis如果您更倾向于从源码编译 hiredis(例如自定义配置):
git clone https://github.com/redis/hiredis.gitcd hiredismakesudo make install连接 Redis 服务器
安装 hiredis 后,您可以将其接入 C++ 项目。请确保在编译器设置中指定头文件路径和库路径:
-I/usr/include(或hiredis.h所在路径)- 链接时添加
-lhiredis
连接运行在 localhost:6379 的 Redis 的最小示例代码:
#include <hiredis/hiredis.h>#include <iostream>
int main() { // 连接到 Redis redisContext *c = redisConnect("127.0.0.1", 6379); if (c == nullptr || c->err) { if (c) { std::cerr << "连接错误:" << c->errstr << std::endl; redisFree(c); } else { std::cerr << "无法为上下文分配内存" << std::endl; } return 1; } std::cout << "已成功连接到 Redis!" << std::endl;
// 释放资源 redisFree(c); return 0;}发送命令与接收响应
hiredis 提供了 redisCommand 函数用于发送命令。它返回指向 redisReply 的指针,其中包含执行结果。请始终检查响应是否为 nullptr,并在使用后释放内存。
我们来看基本操作:设置和获取字符串值。
#include <hiredis/hiredis.h>#include <iostream>#include <string>
int main() { redisContext *c = redisConnect("127.0.0.1", 6379); if (!c || c->err) { std::cerr << "连接错误:" << (c ? c->errstr : "null") << std::endl; return 1; }
// 设置键 "myname" 的值为 "C++ Developer" redisReply *reply = (redisReply*)redisCommand(c, "SET myname 'C++ Developer'"); if (reply == nullptr) { std::cerr << "执行 SET 命令时出错" << std::endl; redisFree(c); return