当前位置: 首页 > article >正文

浅谈C++之Redis缓存

一、基本介绍

        Redis 是一个开源、基于内存、使用 C 语言编写的 key-value 数据库,并提供了多种语言的 API。它的数据结构十分丰富,基础数据类型包括:string(字符串)、list(列表,双向链表)、hash(散列,键值对集合)、set(集合,不重复)和 sorted set(有序集合)。主要可以用于数据库、缓存、分布式锁、消息队列等...

二、基本操作

安装hiredis

首先,你需要安装hiredis库。可以通过包管理器或者从源代码编译安装。

连接到Redis服务器

创建一个redisContext来连接到Redis服务器。

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

int main() {
    // 连接到本地Redis服务器
    redisContext* c = redisConnect("127.0.0.1", 6379);
    if (c == NULL || c->err) {
        if (c) {
            std::cerr << "Error: " << c->errstr << std::endl;
        } else {
            std::cerr << "Can't allocate redis context" << std::endl;
        }
        exit(1);
    }
    // ... 进行Redis操作 ...
    redisFree(c);
    return 0;
}

缓存数据

使用SET命令来缓存数据。

redisReply* reply = (redisReply*)redisCommand(c, "SET %s %s", "foo", "bar");
freeReplyObject(reply);

读取缓存数据

使用GET命令来获取缓存的数据。

reply = (redisReply*)redisCommand(c, "GET foo");
if (reply->type == REDIS_REPLY_STRING) {
    std::cout << "FOO: " << reply->str << std::endl;
}
freeReplyObject(reply);

处理错误和断开连接

在操作完成后,检查错误并断开与Redis服务器的连接。

if (c->err) {
    // 处理错误
    std::cerr << "Error: " << c->errstr << std::endl;
}
redisFree(c);

高级用法

对于更高级的用法,比如使用管道(pipelining)来批量执行命令,可以使用redisCommandArgv函数。

redisAppendCommandArgv(c, 3, "SET", "key", "value");
redisAppendCommandArgv(c, 2, "GET", "key");
// ... 添加更多命令 ...
redisGetReply(c, (void**)&reply, NULL);
if (reply->type == REDIS_REPLY_STRING) {
    std::cout << "Key: " << reply->str << std::endl;
}
freeReplyObject(reply);

三、简单示例

#include <iostream>
#include <hiredis/hiredis.h>
 
int main() {
    // 创建连接到 Redis 服务器的连接
    redisContext *c = redisConnect("127.0.0.1", 6379);
    if (c != NULL && c->err) {
        std::cerr << "连接错误: " << c->errstr << std::endl;
        // 连接错误处理
        redisFree(c);
        return 1;
    }
 
    // 设置键值对
    redisReply *reply = (redisReply*)redisCommand(c, "SET %s %s", "key", "value");
    if (reply->type == REDIS_REPLY_ERROR) {
        std::cerr << "命令错误: " << reply->str << std::endl;
        // 错误处理
        freeReplyObject(reply);
        redisFree(c);
        return 1;
    }
 
    // 获取并打印键对应的值
    reply = (redisReply*)redisCommand(c, "GET %s", "key");
    if (reply->type == REDIS_REPLY_STRING) {
        std::cout << "获取到的值: " << reply->str << std::endl;
    }
 
    // 清理回复对象和连接
    freeReplyObject(reply);
    redisFree(c);
 
    return 0;
}


http://www.kler.cn/news/324431.html

相关文章:

  • 遥感图像变换检测实践上手(TensorRT+UNet)
  • 一文理解mysql 联合索引和各种SQL语句分析
  • 软考论文《论模型驱动架构设计方法及其应用》精选试读
  • Python邮件发送附件:怎么配置SMTP服务器?
  • Java 常用运算符简单总结
  • JS中的事件和DOM操作
  • 【表达式求值算法】拆解复杂问题:实现计算器
  • 17.第二阶段x86游戏实战2-线程发包和明文包
  • Python近红外光谱数据分析
  • 几个将ppt文件压缩变小的方法!
  • [CKA]CKA预约和考试
  • 产品包装检测系统源码分享
  • OpenGL ES简述(1)
  • 如何使用 WebRTC 获取摄像头视频
  • 组播基础-2-IGMP协议
  • ★ C++进阶篇 ★ map和set
  • 个人健康管理小程序(源码+参考文档+定制)
  • python中序列化和反序列化
  • 一步一步优化一套生成式语言模型系统
  • docker简介、安装、基础知识
  • 基于webComponents的纯原生前端框架
  • Xcode 16 上传AppStore遇到第三方库 bitcode 的问题
  • Python爬虫bs4基本使用
  • Java编程基础:类与对象的探索之旅
  • C++学习笔记----8、掌握类与对象(一)---- 对象中的动态内存分配(6)
  • 【球形空间产生器】
  • 解决 Java 中由于 parallelStream 导致的死锁
  • BUG项目管理
  • 【MAC】安装realsense
  • HttpServletRequest简介