使用C++操作Redis客户端

"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.hqwc.cn/news/99117.html

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

相关文章

Xilinx UltraScale架构之可配置逻辑块CLB

目录 一、概览 二、UltraScale架构 2.1 UltraScale/UltraScale特点 2.2 与7系列CLB差异 三、 CLB结构 3.1 LUT 3.2 FF 3.3 多路选择器Multiplexers 3.4 进位链Carry Chain 四、应用 4.1 分布式RAM 4.2 移位寄存器 4.3 进位链Carry Chain 五、参考资料 一、概览 二…

WSL Opencv with_ffmpeg conan1.60.0

我是ubuntu18. self.options[“opencv”].with_ffmpeg True 关键是gcc版本需要conan支持&#xff0c;比如我的是&#xff1a; compilergcc compiler.version7.5 此外还需要安装系统所需库&#xff1a; https://qq742971636.blog.csdn.net/article/details/132559789 甚至来…

最小生成树Kruskal、Prim算法C++

什么是最小生成树 连通图&#xff1a; 在无向图中&#xff0c;若从顶点v1到顶点v2有路径&#xff0c;则称顶点v1和顶点v2是连通的。如果图中任意一对顶点都是连通的&#xff0c;则称此图为连通图。 生成树&#xff1a; 一个连通图的最小连通子图称作为图的生成树。有n个顶点的…

【分布式搜索引擎es】

文章目录 数据搜索DSL实现查询文档搜索结果处理 RestClient实现 旅游案例酒店搜索和分页酒店结果过滤我周边的酒店酒店竞价排名 elasticsearch最擅长的是 搜索和 数据分析。 数据搜索 DSL实现 查询文档 常见的查询类型包括&#xff1a; 查询所有&#xff1a;查询出所有数…

ES查询报错内容长度超过104857600

项目场景&#xff1a; 使用 ElasticsearchRestTemplate 或者使用 RestHighLevelClient 查询 ES 报错 内容长度超过 104857600 问题描述 ES 查询报错 entiity content is too long xxx for the configured buffer limit 104857600 Overridepublic void esQuery() {restHighL…

怎样将几个pdf合并?

在日常工作中&#xff0c;我们经常需要处理大量的PDF文件。有时候&#xff0c;我们需要将多个PDF文件合并成一个文件&#xff0c;以便于快速传输或方便查阅。虽然PDF文件本身不能进行编辑&#xff0c;但是借助专业的PDF编辑软件&#xff0c;我们可以轻松地实现将多个PDF文件合并…

Vue + Element UI 前端篇(六):更换皮肤主题

自定义主题 命令行主题工具 1.安装主题工具 首先安装「主题生成工具」&#xff0c;可以全局安装或者安装在当前项目下&#xff0c;推荐安装在项目里&#xff0c;方便别人 clone 项目时能直接安装依赖并启动。 yarn add element-theme --dev 2.安装chalk主题 安装白垩主题…

2023年行研行业研究报告

第一章 行业概述 1.1 行研行业 行业定义为同一类别的经济活动&#xff0c;这涉及生产相似产品、应用相同生产工艺或提供同类服务的集合&#xff0c;如食品饮料行业、服饰行业、机械制造行业、金融服务行业和移动互联网行业等。 为满足全球金融业的需求&#xff0c;1999年8月…

Redis 7 第六讲 主从模式(replica)架构篇

🌹🌹🌹 此篇开始进入架构篇范围(❤艸`❤) 理论 即主从复制,master以写为主,Slave以读为主。当master数据变化的时候,自动将新的数据异步同步到其它slave数据库。 使用场景 读写分离 容灾备份数据备份水平扩容主从架构 演示案例 注:masterauth、replicaof主…

Django学习

1、启动项目 python manage.py runserversettings.py

2023开学礼《乡村振兴战略下传统村落文化旅游设计》许少辉八一新书对外经济贸易大学图书馆

2023开学礼《乡村振兴战略下传统村落文化旅游设计》许少辉八一新书对外经济贸易大学图书馆

2023年高教社杯 国赛数学建模思路 - 案例:感知机原理剖析及实现

文章目录 1 感知机的直观理解2 感知机的数学角度3 代码实现 4 建模资料 # 0 赛题思路 &#xff08;赛题出来以后第一时间在CSDN分享&#xff09; https://blog.csdn.net/dc_sinor?typeblog 1 感知机的直观理解 感知机应该属于机器学习算法中最简单的一种算法&#xff0c;其…