Hiredis的使用

news2024/9/21 18:44:34

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.coloradmin.cn/o/2115639.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Camtasia 2024破解版注册机包含激活码秘钥

&#x1f3ac; 嗨&#xff0c;亲爱的朋友们&#xff01;今天我要给你们安利一款超级炫酷的屏幕录制和视频编辑软件——Camtasia 2024&#xff01;&#x1f389; camtasia2024绿色免费安装包winmac下载&#xff0c;点击链接即可保存。 https://pan.quark.cn/s/5ee0c4655701 C…

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

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

假期学习-- iOS runloop了解和使用

iOS runloop的总结和理解 https://juejin.cn/post/7167497134294433829?searchId202408060922235E28560E3792F91107ED runloop的概念和数据结构 一般情况下&#xff0c;程序&#xff08;或者说线程&#xff09;在执行完毕后会立即退出或销毁&#xff1b;&#xff0c;但如果对…

体育馆智能可视化:提升场馆管理与观赛体验

利用图扑可视化技术&#xff0c;实时呈现体育馆内各项动态&#xff0c;优化场馆管理&#xff0c;提升观众的观赛体验。

基于人工智能的手写数字识别系统

目录 引言项目背景环境准备 硬件要求软件安装与配置系统设计 系统架构关键技术代码示例 数据预处理模型训练模型预测应用场景结论 1. 引言 手写数字识别是一种经典的计算机视觉任务&#xff0c;目标是让机器能够识别手写数字。通过人工智能技术&#xff0c;特别是卷积神经网…

JS_变量

二、JS的变量 JS中的变量具有如下特征 1 弱类型变量,可以统一声明成var 2 var声明的变量可以再次声明 3 变量可以使用不同的数据类型多次赋值 4 JS的语句可以以; 结尾,也可以不用;结尾 5 变量标识符严格区分大小写 6 标识符的命名规则参照JAVA 7 如果使用了 一个没有声明的变量…

JAVA基础:值传递和址传递

1 值传递和址传递 值传递 方法调用时&#xff0c;传递的实参是一个基本类型的数据 形参改变&#xff0c;实参不变 public static void doSum(int num1,int num2){} main(){doSum(10,20);int i 10 ;int j 20 ;doSum(i,j) ; } public static void t1(int num){num 20 ;Sys…

STM32CubeMX和HAL库-新建项目

目录 新建项目 选择开发板 MCU图形化配置界面总览 MCU配置 新建项目 新建项目包含选择MCU创建项目、选择开发板新建项目和交叉选择MCU新建项目三部分。 1. 选择MCU创建项目 单击主菜单项File→New Project&#xff0c;或Home视图上的ACCESS TO MCU SELECTOR 按钮&#xff0c…

Mac+Pycharm配置PyQt6教程

安装包 pip install PyQt6 PyQt6-tools #查看Qt版本 pip show PyQt6 pip show pyqt6-tools 配置扩展工具 QTD(界面设计) Program&#xff1a;/Users/wan/PycharmProjects/NewDemo/venv/lib/python3.11/site-packages/qt6_applications/Qt/bin/Designer.app Working directo…

dubbo 服务消费原理分析之服务目录

文章目录 前言一、RegistryDirectory1、DynamicDirectory2、RegistryProtocol.doCreateInvoker2、RegistryProtocol.subscribe3、ListenerRegistryWrapper.subscribe4、FailbackRegistry.subscribe5、ZookeeperRegistry.doSubscribe6、RegistryDirectory.notify7、RegistryDire…

无人叉车里程计模块专题

1.无人叉车里程计模块传感器要求 2.里程计功能需求 3.无人叉车里程计模块测试用例 4.无人叉车里程计算法方案 5.源码

合理应用词云图,快速提升你的幻灯展示效果!|科研插图·24-09-08

小罗碎碎念 本期主题&#xff1a;词云图 这一期推文介绍一个非常具有实用价值的图——词云图&#xff0c;正好最近在准备开题答辩的PPT&#xff0c;顺手写一期推文&#xff0c;和大家分享一下。 R语言和Python的代码都准备了一份&#xff0c;其中Python的版本就是我用自己开始…

复制PPT模板

文章目录 环境需求步骤参考 环境 Windows 11 家庭中文版WPS Office&#xff1a;2024夏季更新 (17827) 注&#xff1a;查看WPS Office版本的方法&#xff1a; 点击左上角的“WPS Office”图标&#xff0c;然后点击右上角的三条横线&#xff0c;在弹出菜单中&#xff0c;选择“…

仕考网:公务员面试流程介绍

通知进面信息——资格审查——面试签到——抽签候考 面试形式&#xff1a; 面试分为结构化和无领导小组两种形式 1.在结构化面试中&#xff0c;当轮到某位考生时&#xff0c;引导员将在候考室宣布其编号&#xff0c;随后考生跟随引导人员前往考场入口。考生在开始考试时需回…

Origin画图——怎么才能使折线图更好看

1.这是化的原始图&#xff0c;看着也不错&#xff0c;但是总觉得缺少什么东西 2.下面就来对其进行改造&#xff0c;首先改的是坐标轴和标签。刻度的显示&#xff0c;网格线取消&#xff0c;坐标轴上轴右轴的刻度取消&#xff0c;字体的大小与style改成Arial。 3.对图层底色…

oc打包:权限弹窗无法正常弹出

在遇到编写了权限无法弹出弹窗时,需要查看是不是调用时机不对,这里直接教万能改法。 将权限获取方法编写在applicationDidBecomeActive 进入前台的生命周期接口中,如下: if (@available(iOS 14, *)) {NSLog<

基于yolov5的水稻叶病害检测系统python源码+onnx模型+评估指标曲线+精美GUI界面

【算法介绍】 基于YOLOv5的水稻叶病害检测系统是一种利用深度学习技术实现的高效、准确的病害识别工具。该系统采用YOLOv5算法&#xff0c;该算法以其高效的检测速度和良好的识别准确性在目标检测领域广受好评。 该系统能够实时处理水稻叶片的图像数据&#xff0c;快速准确地…

SpringBoot登录退出|苍穹外卖登录退出分析

文章目录 概要整体流程注意事项一、拦截路径二、token三、注册防止用户重复提交 苍穹外卖登录退出分析注意解决JWT退出后依然有效的问题 概要 结合Spring Boot和Vue3实现安全的用户登录和退出功能&#xff0c;并使用拦截器、JWT和Redis缓存来提高系统的安全性和性能。 整体流…

NC 合并二叉树

系列文章目录 文章目录 系列文章目录前言 前言 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到网站&#xff0c;这篇文章男女通用&#xff0c;看懂了就去分享给你的码吧。 描述 已知两颗二叉…

【魔法 / NOI】

题目 思路 动态规划&#xff1a; 状态定义&#xff1a; f [ k ] [ i ] [ j ] 对应使用了不超过 k 次魔法&#xff0c;从 i 到 j 的路径集合 f[k][i][j] 对应使用了不超过k次魔法&#xff0c;从i到j的路径集合 f[k][i][j]对应使用了不超过k次魔法&#xff0c;从i到j的路径集合 状…