使用C++操作Redis客户端

news2024/11/20 11:50:59

"Who can say where the path will go?" 


         前面我们花了很大的篇幅,讲解了redis中常见常使用的五种数据结构,以及五种数据结构的操作和redis命令。不过在日常开发中,我们的这些操作都是在redis为我们提供的客户端中的,就像使用mysql一样,很多时候不是在mysql-cli去编写sql,而是借助代码程序去访问、操作数据库。更多的时候是使用redis的api,来实现定制化的redis客户端程序,达到访问redis的服务器的目的。

        redis提供了通用的客户端程序,比如命令行、第三方图形化客户端,但在实际中,我们更倾向于使用到的是"定制化"的客户端程序。

                   ——前言

认识RESP

为什么能够实现Redis客户端?

        你说能实现redis客户端就能实现嘛?或者说,如果能够实现redis客户端 ,那是否可以实现其他应用层服务的客户端,比如说qq、农药、原神启动?      

RESP协议:        

 

        但实际上,我们并不需要从0开始,遵照上述协议手写一份redis-cli,因为这套协议公开很久了,已经有很多大佬实现了这套解析、构造。我们只需要使用这些大佬提供的库即可。

Redis C++使用

(1) 环境安装

        C++操作redis的库有很多.咱们此处使⽤redis-plus-plus。这个库的功能强⼤,使⽤简单。

安装hiredis:

        因为redis-plus-plus是基于hiredis实现的,而这个库是一个C语⾔实现的redis客⼾端,我们直接使用包管理器安装即可。

下载 redis-plus-plus源码:

Github:https://github.com/sewenew/redis-plus-plus 

编译 redis-plus-plus: 

        因为Centos系列的camke版本过低,所以我们需要安装camke3:

yum install cmake3

         这个redis-plus-plus使用文档,也介绍了安装手册。

        构建成功后,会在“ /usr/local/include/ ”中多出 sw ⽬录,并且内部包含redis-plus-plus的⼀
系列头⽂件,会在 /usr/local/lib/ 中多出⼀系列 libredis 库⽂件。

        现在,我们可以开始使用这个库来操作redis了!         

(2) redis-plus-plus "hello world"

● 包含redis-plus-plus头文件.

● 创建redis对象.

● 调用ping命令

● 使用makefile编译生成可执行程序                

        我们运行程序后,直接执行程序,就可以得到server给的响应。

(3) redis-plus-plus命令使用

通用命令:

命令执行效果
get/set获取key、设置key
exist判断一个key是否存在
del删除key
keys查询redisdb中缓存的key
expire / ttl设置到期时间、剩余到期时间
type获取value的类型信息

get\set:

        但,我们直接打印这个value是不行的,因为这个类没有重载"<<"移位操作符。

exists:

del:

keys:
        C++的迭代器有几种类型,你是否还记得?

● 输出迭代器 (input)

● 输入迭代器 (output)

● 前向迭代器 (forward_list)

● 双向迭代器 (set\map\list)

● 随机迭代器 (string\vector)

expire and ttl:        

type:

String类型操作:

命令执行效果
set/get设置、获取key
mset/mget多次设置、获取key
getrange/setrange获取范围内的value,覆盖在范围内的原始字符串
incr/decr++value\-value

set\get:

set "NX 和 XX":

mset\mget:

getrange 和 setrange: 

incr/decr: 

hash类型操作:

命令执行效果
hset\hget设置哈希,获取哈希value
hexists判断field存在
hdel删除field
hkeys\hvals返回存储在键中的哈希中的所有字段名称。返回存储在键中的哈希中的所有值。
hmget\hmset多次设置哈希,获取哈希value

hset 和 hget:

hexits:

hdel:

hkeys\hvals:

list类型操作:

命令执行效果
lpush/rpush头插、尾插
lpop/rpop头删、尾删
blpop/brpop阻塞头删、尾删
llenkey中value的个数

lpush\lrange: 

blpop:

llen:

 

set类型操作:

         

命令执行效果
sadd\spop添加、删除(随机)
smembers查询所有的key
sismemberkey是否存在
scardkey的个数
sinter/sinterstore交集、交集存储

sadd 和 smembers: 

 

sismember:

scard:

 

sinterstore:

Zset类型操作:

命令执行效果
zadd/zrange添加、返回存储在< key >中的排序集合中指定范围的元素。
zcard返回存储在key中的排序集的排序集基数(元素数)。
zrem删除key中的member
zscore获取key中的分数
zrank返回成员在存储于键的排序集中的排名

zadd/zrange: 

zrem:

 

zscore/zrank:

 

        以上就是咱们五种数据结构的一些基本的用C++操纵redis的方式,当然这不是全部,只是一些例举。 


本篇到此结束,感谢你的阅读。

祝你好运,向阳而生~

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

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

相关文章

MySQL连接查询和存储过程

目录 一、连接查询 1、内连接 2、左连接 3、右连接 二、存储过程 1、存储过程简介 2、存储过程的优点 3、语法 4、不带参数的存储过程创建 5、带参数的存储过程创建 6、删除存储过程 三、总结 1、连接查询 2、存储过程 一、连接查询 mysql的连接查询&#xff0c;通…

【C语言奥义】char和char数组和char*总是搞混

这边我直接展示个图大家看下&#xff1a; 然后我们看下运行的结果&#xff1a; 为啥第一行的结尾会有个a呢? 因为char数组市存储单个字符的,没有结束符,我们的字符串都应该有结束符,来告诉编译器结束位置,所以需要给char数组后面加一个’\0’元素&#xff1a; 这样就没有问题了…

【LeetCode】双指针妙解有效三角形的个数

Problem: 611. 有效三角形的个数 文章目录 题目分析讲解算法原理复杂度Code 题目分析 首先我们来分析一下本题的思路 看到题目中给出的示例 题目的意思很简单&#xff0c;就是将给到的数字去做一个组合&#xff0c;然后看看这三条边是否可以构成三角形。那判断的方法不用我说&a…

Android样本Repack重打包检测思路

1. 什么是Android样本重打包&#xff0c;为什么要检测重打包 &#xff08;1&#xff09;apk是zip&#xff0c;很容易做repack &#xff08;2&#xff09;repack后&#xff0c;被抄袭&#xff0c;redirect ad&#xff0c;或者插入malicious payloads &#xff08;3&#xff09;…

springboot基础(79):通过pdf模板生成文件

文章目录 前言通过pdf模板生成文件一 . 制作模板二、编辑代码实现模板生成pdf文件三、pdf在线预览和文件下载 扩展问题遇到的问题1. 更换字体为宋体常规 前言 通过pdf模板生成文件。 本章代码已分享至Gitee: https://gitee.com/lengcz/pdfdemo01 通过pdf模板生成文件 一 . 制…

Docker部署(5)——使用docker run命令部署运行jar项目

对于一些简单的单体项目&#xff0c;可以使用 docker run 命令可以直接在命令行中运行容器&#xff0c;无需事先构建镜像。这相较于之前使用的 dockerfile 文件来运行部署项目相当于是另外一种简单的部署方法&#xff0c;关于之前使用dockerfile 文件来运行部署这种方法&#x…

「MySQL-04」Linux环境下使用C/C++连接并操纵MySQL

目录 一、准备mysql库&#xff1a;Connector/C 1. 查看是否有mysql相关的库和头文件 2. 安装devel(开发库) 3.到官网下载开发包&#xff0c;并上传到Linux 3.0 须知 3.1 到官网下载开发包 3.2 上传安装包至Linux 二、mysql库&#xff1a;Connector/C 的使用 1. 创建并初始化mys…

DataLoader的使用

示例代码&#xff1a; import torchvision from torch.utils.data import DataLoader from torch.utils.tensorboard import SummaryWriter# 准备的测试数据集 test_data torchvision.datasets.CIFAR10("./dataset", trainFalse, transformtorchvision.transforms.…

react里map嵌套

1、tab是我自己声明的变量&#xff0c;item是下标&#xff0c;index是key值&#xff08;这些都可以改为自己的数据&#xff09; tab是声明的所有数据&#xff0c;而list是所有数据里面所需要的那一个&#xff0c;items和indexs可以虽然写一个名称代替

HTML基础--Form表单--内联元素

目录 Form表单 表单元素 创建表单 () 文本输入 () 密码输入 单选按钮 () 和 复选框 () 下拉列表 () 和 选项 ()提交按钮 () 重置按钮 () 块元素与行内元素&#xff08;内联元素&#xff09; Form表单 HTML中的表单&#xff08;<form>&#xff09;是一个重要的元…

WPF C# .NET7 基础学习

学习视频地址&#xff1a;https://www.bilibili.com/video/BV1hx4y1G7C6?p3&vd_source986db470823ebc16fe0b3d235addf050 开发工具&#xff1a;Visual Studio 2022 Community 基础框架&#xff1a;.Net 6.0 下载创建过程略 .Net和.Framework 区别是Net是依赖项&#xff…

EasyAVFilter的初衷:把ffmpeg.c当做SDK来用,而不是当做EXE来用

之前我们做一个视频点播的功能&#xff0c;大概的流程就是将上传上来的各种格式的视频&#xff0c;用FFmpeg统一进行一次转码&#xff0c;如果probe到视频的编码格式是H.264就调用-vcodec copy&#xff0c;如果probe到视频的编码格式不是H.264就调用-vcodec libx264&#xff0c…

SpringBoot中自定义starter

SpringBoot自动装配原理&#xff1a; EnableAutoConfiguration注解开启自动装配功能&#xff0c;该注解通常放在应用的主类上。spring.factories文件位于META-INF目录下的配置文件中定义各个自动装配类的全限定名 当SpringBoot启动时&#xff0c;会加载classpath下所有的spri…

JavaScript 手写题

基础手写 全排列&#xff08;力扣原题&#xff09; 要求以数组的形式返回字符串参数的所有排列组合。 注意&#xff1a; 字符串参数中的字符无重复且仅包含小写字母返回的排列组合数组不区分顺序const _permute string > {const result []const map new Map()const df…

vue使用打印组件print-js

项目场景&#xff1a; 由于甲方要求&#xff0c;项目需要打印二维码标签&#xff0c;故开发此功能 开发流程 安装包&#xff1a;npm install print-js --saveprint-js的使用 <template><div id"print" ref"print" ><p>打印内容<p&…

可拖拽编辑的流程图X6

先上图 //index.html&#xff0c;有时候可能加载失败&#xff0c;那就再找一个别的cdn 或者npm下载&#xff0c;如果npm下载&#xff0c; //那么需要全局引入或者局部引入&#xff0c;代码里面写法也会不同&#xff0c;详细的可以看示例<script src"https://cdn.jsdeli…

python可视化——pycharm——Grid - Grid_overlap_multi_xy_axis图

这段代码使用了pyecharts库来创建一个Grid-Overlap图&#xff0c;包括柱状图和折线图。 首先&#xff0c;创建了一个柱状图对象bar&#xff0c;并添加了两个y轴的数据。第一个y轴代表csdn博客数量&#xff0c;第二个y轴代表粉丝数量。然后&#xff0c;使用extend_axis方法扩展…

6、深入解析Kotlin类与对象:构造、伴生、单例全面剖析

前言 本篇文章将带您了解Kotlin编程中的重要概念&#xff1a;类及构造函数、访问修饰符、伴生对象和单例模式。就像搭积木一样&#xff0c;我们会逐步揭开这些概念的面纱&#xff0c;让您轻松理解它们的作用和用法。无论您是编程新手还是有经验的开发者&#xff0c;本文都将为…

一个独立的测试人如何完成一个项目的测试 + 发布

其实啊&#xff0c;每个人都可以「独立完成一个项目的测试 发布」 很多同学&#xff0c;工作了五六年&#xff0c;都没有机会&#xff08;也许是&#xff1a;不敢&#xff09;独立负责一个完整项目的测试&#xff08;独立负责一个项目测试后的上线流程&#xff0c;机会就更少…

手把手教你调用5个公共API获取数字货币市场数据(内附详细源码)

数量技术宅团队在CSDN学院推出了量化投资系列课程 欢迎有兴趣系统学习量化投资的同学&#xff0c;点击下方链接报名&#xff1a; 量化投资速成营&#xff08;入门课程&#xff09; Python股票量化投资 Python期货量化投资 Python数字货币量化投资 C语言CTP期货交易系统开…