浅谈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;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

CnLg.NJ

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值