【redis】redis和hiredis的基本使用

总结:

介绍了一下redis和hiredis的安装步骤,用一个简单的demo演示了使用redis的基本过程。

启动redis步骤

1、下载redis:https://github.com/redis/redis

2、编译命令:make

3、编译产物:libredis.a(静态库)和可执行文件( redis-server

4、运行redis服务:./redis-server

使用hiredis(redis客户端)连接redis

1、下载hiredis:https://github.com/redis/hiredis/tree/v1.3.0

2、编译命令:

bash 复制代码
make
sudo make install
sudo ldconfig

3、编写一个简单的demo

cpp 复制代码
#include <iostream>
#include <string>
extern "C" {
    #include <hiredis/hiredis.h>
}

int main() {
    // 连接 Redis 服务器
    redisContext* context = redisConnect("127.0.0.1", 6379);
    if (context == nullptr || context->err) {
        if (context) {
            std::cerr << "连接错误: " << context->errstr << std::endl;
            redisFree(context);
        } else {
            std::cerr << "无法分配 Redis 连接上下文" << std::endl;
        }
        return 1;
    }
    std::cout << "成功连接到 Redis 服务器" << std::endl;

    // 执行 SET 命令
    redisReply* reply = static_cast<redisReply*>(redisCommand(context, "SET mykey %s", "Hello, Redis!"));
    if (reply == nullptr) {
        std::cerr << "执行 SET 命令失败" << std::endl;
        redisFree(context);
        return 1;
    }

    // 检查 SET 命令结果
    if (reply->type == REDIS_REPLY_STATUS && std::string(reply->str) == "OK") {
        std::cout << "SET 命令执行成功" << std::endl;
    } else {
        std::cerr << "SET 命令执行失败: " << reply->str << std::endl;
    }
    freeReplyObject(reply);

    // 执行 GET 命令
    reply = static_cast<redisReply*>(redisCommand(context, "GET mykey"));
    if (reply == nullptr) {
        std::cerr << "执行 GET 命令失败" << std::endl;
        redisFree(context);
        return 1;
    }

    // 检查 GET 命令结果
    if (reply->type == REDIS_REPLY_STRING) {
        std::cout << "GET 结果: " << reply->str << std::endl;
    } else {
        std::cerr << "GET 命令执行失败,非预期的回复类型" << std::endl;
    }
    freeReplyObject(reply);

    // 执行 INCR 命令(演示数值操作)
    reply = static_cast<redisReply*>(redisCommand(context, "INCR counter"));
    if (reply == nullptr) {
        std::cerr << "执行 INCR 命令失败" << std::endl;
        redisFree(context);
        return 1;
    }

    // 检查 INCR 命令结果(整数类型)
    if (reply->type == REDIS_REPLY_INTEGER) {
        std::cout << "INCR 结果: " << reply->integer << std::endl;
    }
    freeReplyObject(reply);

    // 释放连接
    redisFree(context);
    std::cout << "已断开与 Redis 服务器的连接" << std::endl;
    return 0;
}

代码说明:

  • 连接部分 :使用 redisConnect 连接到本地 Redis 服务器(默认ip地址是127.0.0.1,端口6379)
  • 错误处理:检查连接是否成功,并处理可能的错误
  • 命令执行 :使用 redisCommand 执行 Redis 命令,如 SET、GET、INCR
  • 结果解析 :根据 redisReply 的类型判断命令执行结果
  • 资源释放 :使用 freeReplyObject 释放回复对象,使用 redisFree 释放连接

4、编译:g++ -o main main.cpp -lhiredis

5、运行程序:./redis_demo

6、日志输出:

复制代码
成功连接到 Redis 服务器
SET 命令执行成功
GET 结果: Hello, Redis!
INCR 结果: 1
已断开与 Redis 服务器的连接
相关推荐
专业软件系统开发33 分钟前
药品说明书查询系统源码 本地数据库 PHP版本
数据库·查询系统源码·说明书查询源码
qq_4798754335 分钟前
C++ std::Set<std::pair>
开发语言·c++
云知谷3 小时前
【C++基本功】C++适合做什么,哪些领域适合哪些领域不适合?
c语言·开发语言·c++·人工智能·团队开发
仰泳的熊猫4 小时前
LeetCode:785. 判断二分图
数据结构·c++·算法·leetcode
^Moon^4 小时前
CycloneDDS:跨主机多进程通信全解析
c++·分布式·dds
添砖java‘’4 小时前
vim高效编辑:从入门到精通
linux·编辑器·操作系统·vim
冉冰学姐4 小时前
SSM足球爱好者服务平台i387z(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。
数据库·ssm 框架·足球爱好者服务平台
大飞记Python4 小时前
部门管理|“编辑部门”功能实现(Django5零基础Web平台)
前端·数据库·python·django
tryCbest4 小时前
CentOS部署Docker容器
linux·docker·centos
C_Liu_6 小时前
C++:list
开发语言·c++