Hiredis的使用

Hiredis的使用

在这里插入图片描述

📸这里安利一个github仓库介绍 图片生成
Socialify 一键生成专业 GitHub 仓库简介图

一、Hiredis的安装与使用

1、下载hiredis软件包, https://github.com/redis/hiredis.git 或者使用git下载到本地

git clone https://github.com/redis/hiredis.git (已经将源文件下载到了本地,可以直接使用)

2、进行解压与安装,步骤如下

tar -zxvf hiredis.tar.gz
cd hiredis
make
sudo make install

3、更新动态库配置文件
sudo ldconfig

4、头文件与实现文件路径
按照上面步骤安装之后,hiredis的头文件会存在/usr/local/include下面,hiredis的库文件存在/usr/local/lib下面

5、编译方式
g++ xxx.cc -o xxx -I /usr/local/include/hiredis -lhiredis

或者直接g++ xxx.cc -lhiredis需要链接hiredis的库文件

6、后续在代码中引用hiredis的头文件,可以直接使用

#include<hiredis/hiredis.h>

二、Hiredis的重要API

2.1、连接redis数据库

redisContext = redisConnect(const char* ip, int port)
//redisContext不是线程安全的
typedef struct redisContext{int err;char errstr[128];int fd;int flags;char *buff;redisReader = *reader;
}redisContext;

2.2、发送请求命令

第一个参数为连接数据库返回的值,剩余的是可变参数,类似printf。此函数的返回值是void *,但是一般会强制转换为redisReply类型,便于做进一步处理。

void *redisCommand(redisContext *c, const char* format...)

如果命令执行错误,返回值为NULL,redisContext的err字段被设置为非零常量。如果,错误发生,原先的redisContext就不能重复使用,需要重新建立一个新的连接。如果成功执行命令,则标准返回一个redisReply类型,该类型结构如下:

typedef struct redisReply{int type;/*测试收到*/long long integer;/*type是REDIS-REPLY-INTEGER类型,integer保存返回的值*/char* str;/*type是REDIS_REPLY_ERROR和REDIS_REPLY_STRING,str保存返回的值int len;/*保存str类型的长度*/size_t elements;/*type是REDIS_REPLY_ARRAY,保存返回多个元素的数量*/struct redisReply **element;/*返回多个元素以redisReply对象的形式存放*/}redisReply;
//type还可以是REDIS_REPLY_NIL,表示返回了一个零对象,没有数据可以访问。

通过redisReply结构体中的type变量可以确定命令执行的情况.

#define REDIS_REPLY_STRING 1  //字符串#define REDIS_REPLY_ARRAY 2  //数组,例如mget返回值
#define REDIS_REPLY_INTEGER 3  //数字类型
#define REDIS_REPLY_NIL 4   //空
#define REDIS_REPLY_STATUS 5  //状态,例如set成功返回的‘OK’
#define REDIS_REPLY_ERROR 6  //执行失败
  • REDIS_REPLY_STATUS:
    返回执行结果为状态的命令。比如set命令的返回值的类型是REDIS_REPLY_STATUS,然后只有当返回信息是"OK"时,才表示该命令执行成功。可以通过reply->str得到文字信息,通过reply->len得到信息长度。

  • REDIS_REPLY_ERROR:
    返回错误。错误信息可以通过reply->str得到文字信息,通过reply->len得到信息长度。

  • REDIS_REPLY_INTEGER:
    返回整型标识。可以通过reply->integer变量得到类型为long long的值。

  • REDIS_REPLY_NIL:
    返回nil对象,说明不存在要访问的数据。

  • REDIS_REPLY_STRING:
    返回字符串标识。可以通过reply->str得到具体值,通过reply->len得到信息长度。

  • REDIS_REPLY_ARRAY:
    返回数据集标识。数据集中元素的数目可以通过reply->elements获得,每个元素是个

  • redisReply对象,
    元素值可以通过reply->element[…index…].*形式获得,用在获取多个数据结果的操作。

2.3、释放资源

释放redisCommand执行后返回的的redisReply所占用的内存。

void freeReplyObject(void *reply)

释放redisConnect()所产生的连接

void redisFree(redisContext *c)

占用的内存。

void freeReplyObject(void *reply)

释放redisConnect()所产生的连接

void redisFree(redisContext *c)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/419153.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

一文说清什么是数据仓库

01 数据仓库的概念 数据仓库的概念可以追溯到20世纪80年代&#xff0c;当时IBM的研究人员开发出了“商业数据仓库”。本质上&#xff0c;数据仓库试图提供一种从操作型系统到决策支持环境的数据流架构模型。 目前对数据仓库&#xff08;Data Warehouse&#xff09;的标准定义&a…

51单片机-DS1302(RTC实时时钟芯片)

数据手册在主页资源免费贡献 开发板芯片数据手册 https://www.alipan.com/s/nnkdHhMGjrz 提取码: 95ik 点击链接保存&#xff0c;

算法分享——《双指针》

文章目录 ✅[《移动零》](https://leetcode.cn/problems/move-zeroes/)&#x1f339;题目描述&#xff1a;&#x1f697;代码实现&#xff1a;&#x1f634;代码解析&#xff1a; ✅[《复写零》](https://leetcode.cn/problems/duplicate-zeros/)&#x1f339;题目描述&#xf…

Grafana 可视化配置

Grafana 是什么 Grafana 是一个开源的可视化和监控工具&#xff0c;广泛用于查看和分析来自各种数据源的时间序列数据。它提供了一个灵活的仪表盘&#xff08;dashboard&#xff09;界面&#xff0c;用户可以通过它将数据源中的指标进行图表化展示和监控&#xff0c;帮助分析趋…

Linux概述、远程连接、常用命令

Linux介绍 Linux操作系统介绍 Linux操作系统的特点 开源免费安全稳定可移植性好 Linux可以安装在不同的设备上 高性能 Linux的使用领域 应用服务器数据库服务器网络服务器虚拟化云计算嵌入式领域个人PC移动手机 Linux文件系统和目录 /&#xff1a;根目录&#xff0c;唯一/h…

flinkcdc 问题记录篇章

startupOptions 讲解 startupOptions 有三个参数initial、earliest、latest initial&#xff1a;因为binlog中不一定包含所有的数据&#xff0c;那么需要全表扫描所有的表&#xff0c;形成快照。常用于历史数据 earliest&#xff1a;从最早的变更日志开始读取&#xff08;仅增…

linux下进行lvm分区及扩容

目录 LVM存储管理介绍 lvm磁盘扩容有两种方式 创建lvm磁盘 1. 首先先加入第一块儿新的磁盘 2. 对新磁盘 /dev/sdb 进行分区 通过LVM命令创建新卷 1. 创建物理卷 2.创建卷组 并将物理卷加入其中 3. 创建逻辑卷并分配大小 4.格式化刚刚创建的硬盘 5. 挂载磁盘 扩容lvm…

第 2 章:AJAX 的使用

AJAX 的使用 核心对象&#xff1a;XMLHttpRequest&#xff0c;AJAX 的所有操作都是通过该对象进行的。 1. 使用步骤 创建 XMLHttpRequest 对象 var xhr new XMLHttpRequest(); 设置请求信息 xhr.open(method, url);//可以设置请求头&#xff0c;一般不设置 xhr.setReques…

开放式耳机音质好不好?盘点高音质的开放式耳机排行榜10强

开放式耳机音质好不好其实没有准确回答&#xff0c;因为开放式耳机也有其独特的优势特点。 由于开放式耳机的设计原因&#xff0c;所以如果将其与入耳式耳机相比&#xff0c;可能会在音质还原度以及降噪功能方面稍显逊色&#xff0c;当然开放式耳机的音质也并非很差&#xff0…

CAD二次开发IFoxCAD框架系列(26)- 分段测量多段线长度和计算多边形的面积

#region 分段测量多段线长度private static double textHight 10;[CommandMethod(nameof(PolylineDemo))]public void PolylineDemo(){using var tr new DBTrans();if(!tr.LayerTable.Has("标注")){tr.LayerTable.Add("标注",1);}var pso new PromptSel…

【Java】ApiPost请求返回 `406` 状态码(jackson)

Java系列文章目录 补充内容 Windows通过SSH连接Linux 第一章 Linux基本命令的学习与Linux历史 文章目录 Java系列文章目录一、前言二、学习内容&#xff1a;三、问题描述3.1 问题截图3.2 错误简介3.2.1 HTTP状态码 406 Not Acceptable3.2.2 序列化和反序列化 3.3 后端问题位置…

HarmonyOS -服务卡片

服务卡片提供了一种界面展示形式&#xff0c;可以将应用的重要信息或操作前置到服务卡片以达到服务直达、减少跳转层级的体验效果。有些类似于创建了一种 “快键方式”&#xff0c;比如下面的卡片流程图&#xff1a; 添加基础卡片 右键入口模块按照图示新增卡片 ArkTS卡片创建…

4-1.Android Camera 之 CameraInfo 编码模板(前后置摄像头理解、摄像头图像的自然方向理解)

一、Camera.CameraInfo Camera.CameraInfo 是用于获取设备上摄像头信息的一个类&#xff0c;它提供摄像头的各种详细信息&#xff0c;例如&#xff0c;摄像头的方向、是否支持闪光灯等&#xff0c;以下是它的常用属性 static int CAMERA_FACING_BACK&#xff1a;表示设备的后置…

【生日视频制作】F900xr宝马摩托车提车交车仪式AE模板修改文字软件生成器教程特效素材【AE模板】

生日视频制作教程F900xr宝马摩托车提车交车仪式AE模板修改文字特效广告生成神器素材祝福玩法AE模板工程 AE模板套用改图文教程↓↓&#xff1a; 怎么如何做的【生日视频制作】F900xr宝马摩托车提车交车仪式AE模板修改文字软件生成器教程特效素材【AE模板】 生日视频制作步骤&a…

Unity 资源 之 Super Confetti FX:点亮项目的璀璨粒子之光

Unity 资源 之 Super Confetti FX&#xff1a;点亮项目的璀璨粒子之光 一&#xff0c;前言二&#xff0c;资源包内容三&#xff0c;免费获取资源包 一&#xff0c;前言 在创意的世界里&#xff0c;每一个细节都能决定一个项目的独特魅力。今天&#xff0c;要向大家介绍一款令人…

UNITY UI简易反向遮罩

附带示例资源文件&#xff1a;https://download.csdn.net/download/qq_55895529/89726994?spm1001.2014.3001.5503 大致效果&#xff1a; 实现思路:通过ui shader的模板测试功能实现 通过让想要被突出显示的物体优先渲染并写入模板值,而后再让黑色遮罩渲染并判断模板值进行渲…

龙芯+FreeRTOS+LVGL实战笔记(新)——06添加二级按钮

本专栏是笔者另一个专栏《龙芯+RT-Thread+LVGL实战笔记》的姊妹篇,主要的区别在于实时操作系统的不同,章节的安排和任务的推进保持一致,并对源码做了完善与优化,各位可以先到本人主页下去浏览另一专栏的博客列表(目前已撰写36篇,图1所示),再决定是否订阅。此外,也可以…

揭秘 AMD GPU 上 PyTorch Profiler 的性能洞察

Unveiling performance insights with PyTorch Profiler on an AMD GPU — ROCm Blogs 2024年5月29日&#xff0c;作者&#xff1a;Phillip Dang。 在机器学习领域&#xff0c;优化性能通常和改进模型架构一样重要。在本文中&#xff0c;我们将深入探讨 PyTorch Profiler&#…

【人工智能学习笔记】2_数据处理基础

数据的概述 数据&#xff08;Data&#xff09;的定义 用于表示客观事物的未经加工的原始素材不仅指狭义上的数字&#xff0c;也只具有一定意义的文字、字母、数字符号的组合客观事物的属性、数量、位置及其相互关系的抽象表示 在计算机科学与技术领域中&#xff0c;数据是指…

vite+vue3+typescript+elementPlus前端实现电子证书查询系统

实现背景&#xff1a;之前电子证书的实现是后端实现的&#xff0c;主要采用GD库技术&#xff0c;在底图上添加文字水印和图片水印实现的。这里采用前端技术实现电子证书的呈现以及点击证书下载&#xff0c;优点是&#xff1a;后端给前端传递的是一组数据&#xff0c;不需要传证…