新闻中心
C++怎么连接和操作Redis数据库_C++ NoSQL数据库交互与hiredis库使用
使用hiredis库可高效实现C++与Redis交互。首先安装libhiredis-dev或hiredis-devel,再通过redisConnect连接Redis服务器,调用redisCommand执行SET、GET等命令,操作字符串、列表等数据类型,并用freeReplyObject释放响应结果,最后redisFree断开连接。编译时需链接-hiredis。

在C++中连接和操作Redis数据库,最常用的方式是使用官方推荐的C客户端库 hiredis。由于Redis本身是用C语言编写的,hiredis轻量高效,被广泛用于C/C++项目中的NoSQL数据交互。
安装 hiredis 库
在开始前,需要先安装 hiredis 动态库和头文件。以 Ubuntu/Debian 系统为例:
sudo apt-get update sudo apt-get install libhiredis-dev
如果你使用的是 CentOS 或 Fedora:
sudo yum install hiredis-devel
也可以从 GitHub 源码编译安装:
git clone https://github.com/redis/hiredis.git
cd hiredis
make
sudo make install
sudo ldconfig // 刷新共享库缓存
</font>
<H3>编写 C++ 程序连接 Redis</H3>
<p>使用 hiredis 连接 Redis 非常简单。以下是一个基本的同步连接示例,展示如何设置键值、获取值并处理响应。</p>
<font face="Courier New">
<pre class="brush:php;toolbar:false;">
#include <hiredis/hiredis.h>
#include <iostream>
int main() {
// 1. 连接 Redis 服务器
redisContext *context = redisConnect("127.0.0.1", 6379);
if (context == nullptr || context->err) {
if (context) {
std::cerr << "连接错误: " << context->errstr << std::endl;
} else {
std::cerr << "无法分配 redis context" << std::endl;
}
return -1;
}
std::cout << "成功连接到 Redis 服务器!" << std::endl;
// 2. 执行 SET 命令
redisReply *reply = (redisReply*)redisCommand(context, "SET mykey 'Hello from C++'");
if (reply == nullptr) {
std::cerr << "执行命令失败: " << context->errstr << std::endl;
redisFree(context);
return -1;
}
std::cout << "SET 命令执行结果: " << reply->str << std::endl;
freeReplyObject(reply);
// 3. 执行 GET 命令
reply = (redisReply*)redisCommand(context, "GET mykey");
if (reply != nullptr && reply->type == REDIS_REPLY_STRING) {
std::cout << "GET mykey 的值: " << reply->str << std::endl;
} else {
std::cout << "键不存在或返回类型错误" << std::endl;
}
freeReplyObject(reply);
// 4. 断开连接
redisFree(context);
return 0;
}
编译与运行
编译时需要链接 hiredis 库:
g++ -o redis_demo redis_demo.cpp -lhiredis
确保 Redis 服务正在运行:
redis-server --daemonize yes
然后运行程序:
N世界
一分钟搭建会展元宇宙
138
查看详情
./redis_demo
输出应为:
成功连接到 Redis 服务器! SET 命令执行结果: OK GET mykey 的值: Hello from C++
处理复杂数据类型与异常
Redis 支持多种数据结构,如列表、哈希、集合等。你可以通过发送相应的命令来操作它们。
例如,向列表添加元素并读取:
// 添加元素到列表
reply = (redisReply*)redisCommand(context, "LPUSH mylist 'item1'");
freeReplyObject(reply);
reply = (redisReply*)redisCommand(context, "LPUSH mylist 'item2'");
freeReplyObject(reply);
// 获取列表长度
reply = (redisReply*)redisCommand(context, "LLEN mylist");
if (reply->type == REDIS_REPLY_INTEGER) {
std::cout << "列表长度: " << reply->integer << std::endl;
}
freeReplyObject(reply);
// 获取所有元素
reply = (redisReply*)redisCommand(context, "LRANGE mylist 0 -1");
if (reply->type == REDIS_REPLY_ARRAY) {
for (size_t i = 0; i < reply->element
s; ++i) {
std::cout << "元素 " << i << ": " << reply->element[i]->str << std::endl;
}
}
freeReplyObject(reply);
注意判断 reply->type 类型,避免空指针或类型不匹配导致崩溃。
异步操作(可选进阶)
hiredis 还提供异步 API(hiredis async),适用于高并发场景。它基于事件循环,可与 libevent、libev 等集成,实现非阻塞通信。
对于大多数中小型应用,同步接口已足够高效。
基本上就这些。掌握 hiredis 后,C++ 与 Redis 的交互变得直接而高效。以上就是C++怎么连接和操作Redis数据库_C++ NoSQL数据库交互与hiredis库使用的详细内容,更多请关注其它相关文章!
# 连接到
# 公司网站建设设计服务
# 营销推广效率控制策略
# 网站和品牌建设的关系
# 广东推广关键词排名优化
# 滨州网站建设网站
# 为什么想做seo
# 天芷seo
# seo相关知识大全
# 保定seo服务网络公司
# 西安网站改版优化
# 内存管理
# 进阶
# 是一个
# 的是
# 时需
# redis
# 数据处理
# 客户端
# 如何在
# 数据结构
# red
# stream
# ios
# c++
# ai
# ubuntu
# c语言
# github
# git
# centos
相关栏目:
【
科技资讯46185 】
【
网络学院92790 】
相关推荐:
外媒分析《GTA6》定价:卖100美元可以但真没必要!
优化大型XML文件解析:基于Python流式处理的内存高效方案
荣耀Play7TPro怎样在信息App置顶客服对话_iPhone荣耀Play7TPro信息App置顶客服对话【优先查看】
qq浏览器如何查看和导出已保存的密码 qq浏览器密码管理器数据备份教程
Django表单验证失败时保留用户输入数据的最佳实践
QQ邮箱在线使用入口 QQ邮箱个人账号网页版登录
taptap防沉迷怎么解除 taptap解除健康系统限制说明【2025最新】
高德地图公交到站提醒失败如何解决 高德提醒权限设置
Golang如何处理RPC请求负载均衡_Golang RPC请求负载均衡策略与实践
抖音怎么赚钱_抖音创作者变现方法与途径指南
如何修改开机登录密码_Windows账户安全设置超详细教程【必学】
Python实现多节点属性重叠度分析教程
CSS布局中意外空白:解决padding-top导致的顶部间距问题
uc手机浏览器网页版入口 uc浏览器手机版便捷登录首页
一加手机拍照效果不好怎么办 一加哈苏影像调校与专业模式使用教程【高手篇】
qq浏览器打开空白页怎么办 qq浏览器启动后显示白屏的解决教程
Win11输入法不见了怎么办_Windows11恢复语言栏显示方法
Composer的 "licenses" 命令如何帮助你遵守开源协议_检查项目依赖的许可证合规性
Go语言中高效处理x-www-form-urlencoded表单数据
C++如何操作注册表_Windows平台下C++读写注册表的API函数详解
Angular Material 垂直步进器:实现底部到顶部排序的教程
小红书网页版入口链接分享 小红书官网直接进
在J*aScript中复现SciPy的B样条拟合与求值:关键考量
多闪网页版在线观看免费入口_多闪官网访问入口
使用Python高效删除Word宏并转换DOCM为DOCX格式
AO3最新入口2025公告_AO3中文官网合集
如何在J*a中使用Locale处理多语言环境
J*a 递归快速排序中静态变量的状态管理与陷阱
飞书妙记怎样用语音转文字速记_飞书妙记用语音转文字速记【速记方法】
照顾宝贝2小游戏点击立即在线玩
蛙漫2日版入口 WAMAN2(日版)无删减漫画官网链接
Go语言中Map存储的结构体如何调用指针方法:深入解析与实践
Tabulator表格日期时间排序问题及自定义解决方案
J*aScript动态修改指定div内所有a标签样式指南
Lar*el Excel导入时生成自定义递增ID的策略与实践
Lar*el Form Request中唯一性验证在更新操作中的正确实现
快手网页版在线登录 快手网页版官网入口快速访问
Safari浏览器输入栏卡顿如何解决 Safari搜索建议与缓存清理
Win11怎么合并任务栏图标 Win11开启任务栏合并减少图标占空间【方法】
word邮件合并后日期格式不对怎么改_Word邮件合并日期格式修改方法
CSS Flexbox与媒体查询:实现响应式布局中元素的并排与堆叠
Python自定义类排序:解决lambda键值访问TypeError的实践指南
如何使用CaptainHook和Composer管理Git钩子_在提交前自动运行代码检查的Composer配置
CSS如何设置hover状态颜色_hover伪类调整背景或文字颜色
126邮箱手机版登录官网2026_126手机邮箱免费入口最新
Yandex官网搜索引擎免登录_俄罗斯Yandex一键直达入口
包子漫画官方网站在线链接-包子漫画在线阅读平台主页地址
在Pyomo中实现基于变量的条件约束:Big-M方法详解
修复二维数组索引越界异常:一维循环到二维坐标的正确映射
Win10系统服务哪些可以禁用 Win10安全优化服务列表【干货】


2025-11-28
浏览次数:次
返回列表
s; ++i) {
std::cout << "元素 " << i << ": " << reply->element[i]->str << std::endl;
}
}
freeReplyObject(reply);