Redis C++ 客户端:连接、安装与使用示例

面向初学者的在线Python训练器

轻松学习Python,无需理论负担。在浏览器中直接解决带自动检查的实践任务,无需安装任何东西。

开始课程

Redis C++ 客户端:概述与实践指南



Redis 是一种高性能的内存数据库,广泛用于缓存、会话管理、消息队列和实时分析。为了在 C++ 语言中与 Redis 交互,有多个成熟的库。在本文中,我们将介绍两个最流行的库:hiredis(官方 C 客户端,易于集成到 C++ 中)和 Redis++(现代 C++17 客户端,语法便捷)。您将了解如何在您的项目中安装、连接和使用这些工具。



1. hiredis 库



hiredis 是一个极简的 C 客户端,由 Redis 的同一团队开发。它轻量、快速,并支持同步和异步请求。对于 C++ 程序员来说,hiredis 是一个很好的基础,因为它可以直接从 C++ 代码中调用,并封装到 RAII 对象中。



安装 hiredis

通过包管理器或从源码编译安装 hiredis:

# Ubuntu/Debiansudo apt-get install libhiredis-dev

# macOS (Homebrew)brew install hiredis

# 从源码编译git clone https://github.com/redis/hiredis.gitcd hiredismakesudo make install


连接与基本示例

使用 hiredis 需要包含头文件并与库链接。以下是连接到 Redis 并执行简单命令的示例:

#include <iostream>#include <hiredis/hiredis.h>

int main() { // 连接到 localhost:6379 上的 Redis redisContext *c = redisConnect("127.0.0.1", 6379); if (c == nullptr || c->err) { std::cerr << "连接错误: " << c->errstr << std::endl; return 1; }

// 发送 SET 命令 redisReply *reply = (redisReply*)redisCommand(c, "SET key1 Hello"); if (reply->type == REDIS_REPLY_STATUS) { std::cout << "SET: " << reply->str << std::endl; } freeReplyObject(reply);

// 发送 GET 命令 reply = (redisReply*)redisCommand(c, "GET key1"); if (reply->type == REDIS_REPLY_STRING) { std::cout << "GET: " << reply->str << std::endl; } freeReplyObject(reply);

// 释放资源 redisFree(c); return 0;}

编译时需添加 -lhiredis 标志:

g++ -o test test.cpp -lhiredis


2. Redis++ 库 (sw/redis++ / redox)



Redis++(也称为 sw/redis++)是一个现代 C++17 客户端,提供类型安全接口,支持连接池、事务、管道和 Redis 集群。如果您更喜欢使用“纯” C++ 而非 C 风格,Redis++ 是理想的选择。



安装 Redis++

通过 vcpkg、Conan 或从源码编译安装:

# 通过 vcpkgvcpkg install redis-plus-plus

# 通过 Conanconan install redis++/1.3.3@

# 从源码编译git clone https://github.com/sewenew/redis-plus-plus.gitcd redis-plus-plusmkdir build && cd buildcmake ..makesudo make install


Redis++ 使用示例

该库使用 Redis 对象来执行命令:

#include <iostream>#include <sw/redis++/redis++.h>

int main() { try { // 创建客户端 sw::redis::Redis redis("tcp://127.0.0.1:6379");

// 设置值 redis.set("mykey", "Hello, Redis++!");

// 获取值 auto val = redis.get("mykey"); if (val) { std::cout << "GET: " << *val << std::endl; }

// 哈希操作 redis.hset("user:1", "name", "Alice"); redis.hset("user:1", "age"

推荐