Redis——redispluspls库list及set类型相关接口使用

文章目录

    • list 类型相关接口
      • lpush和lrange
      • rpush
      • lpop和rpop
      • blpop和brpop
      • llen
    • set 类型相关接口
      • sadd和smembers
      • sismember
      • scard
      • spop
      • sinster
      • sinterstore

list 类型相关接口

lpush和lrange

void lrange_lpush(sw::redis::Redis& redis){std::cout<<"lpush 和 lrange"<<std::endl;redis.flushall();//插入单个元素redis.lpush("key","111");//插入一组元素,基于初始化列表redis.lpush("key",{"222","333","444"});//插入一组元素,基于迭代器vector<string> values = {"555","666","777"};redis.lpush("key",values.begin(),values.end());//lrange获取列表中元素vector<string> result;auto it  = std::back_inserter(result);redis.lrange("key",0,-1,it);for(const auto& elem:result){std::cout<<elem<<std::endl;}
}

在这里插入图片描述

由于lpush是头插,所以后来的元素在前面

rpush

 std::cout<<"lpush 和 lrange"<<std::endl;redis.flushall();//插入单个元素redis.lpush("key","111");//插入一组元素,基于初始化列表redis.lpush("key",{"222","333","444"});//插入一组元素,基于迭代器vector<string> values = {"555","666","777"};redis.lpush("key",values.begin(),values.end());//lrange获取列表中元素vector<string> result;auto it  = std::back_inserter(result);redis.lrange("key",0,-1,it);for(const auto& elem:result){std::cout<<elem<<std::endl;}

在这里插入图片描述

lpop和rpop

void lpop_rpop(sw::redis::Redis& redis){std::cout<<"rpush 和 lrange"<<std::endl;redis.flushall();redis.rpush("key",{"1","2","3","4"});auto result = redis.lpop("key");//插入一组元素,基于迭代器if(result) std::cout<<"lpop:"<<result.value()<<std::endl;result = redis.rpop("key");if(result) std::cout<<"rpop:"<<result.value()<<std::endl;
}

在这里插入图片描述

blpop和brpop

这里先了解一下blpop的返回值

在这里插入图片描述

什么是 OptionalStringPair, optional里面包裹了一个pair,pair里面是string

blpop要返回的内容是两个部分

  1. 这个元素属于哪个list(blpop可以同时监听多个list)
  2. 当前被删除的元素

blpop还可以设置超时时间,如果在指定时间内,还没有其他客户端往指定的list中插入元素,此时blpop就直接返回了,此时返回的就是一个无效值了

std::cout<<"blpop"<<std::endl;redis.flushall();auto result =  redis.blpop("key");if(result) {std::cout<<"key:"<<result.value().first<<std::endl;//result->firststd::cout<<"elem:"<<result.value().second<<std::endl;//result->second}else{std::cout<<"result 无效"<<std::endl;}

在这里插入图片描述

这里由于没有元素在里面,blpop就被阻塞到这里了,另外开一个中端在redis-cli中插入key,就没有阻塞了

在这里插入图片描述

auto result = redis.blpop({"key","key2","key3"});当然也可以一次监听多个key,只要其中有一个key有元素插入,就会停止阻塞

设置超时时间

  using namespace std::chrono_literals;std::cout<<"blpop"<<std::endl;redis.flushall();auto result =  redis.blpop("key",5s);if(result) {std::cout<<"key:"<<result.value().first<<std::endl;std::cout<<"elem:"<<result.value().second<<std::endl;}else{std::cout<<"result 无效"<<std::endl;}

在这里插入图片描述

llen

void llen(sw::redis::Redis& redis){std::cout<<"llen"<<std::endl;redis.flushall();redis.lpush("key",{"111","222","333","444"});long long len = redis.llen("key");std::cout<<len<<std::endl;
} 
int main()
{sw::redis::Redis redis("tcp://127.0.0.1:6379");llen(redis);return 0;
}

在这里插入图片描述

看到这里不难发现,redis-plus-plus这个库,接口设计的风格,是非常统一的

当一个函数,参数需要传递多个参数的时候,往往都是支持 初始化列表 或者是一对迭代器的方式来实现的

当一个函数 返回值需要多个数据的时候,也往往会借助插入迭代器,来实现往一个容器中添加元素的效果

当某些场景涉及到无效值的时候,往往会搭配 std::optional来进行使用

很多C++的代码,都是按照上方式来设计的

set 类型相关接口

sadd和smembers

 std::cout<<"sadd 和 smemers"<<std::endl;redis.flushall();//一次添加一个元素redis.sadd("key","111");//一次添加多个元素使用初始化列表redis.sadd("key",{"222","333","444"});//一次添加多个元素使用迭代器std::set<string> elems = {"555","666","777"};redis.sadd("key",elems.begin(),elems.end());//获取上述元素//vector<string> result;//auto it  = std::back_inserter(result);std::set<string> result;//由于set的元素的顺序是固定的,插入的位置无所谓,最终都是有序的,但是这里必须要 传入一个插入的位置auto it  = std::inserter(result,result.end());//begin,end,或者其他位置都可以redis.smembers("key",it);for(const auto&x:result){std::cout<<x<<std::endl;}

在这里插入图片描述

sismember

std::cout<<"sismember "<<std::endl;redis.flushall();redis.sadd("key",{"222","333","444"});bool ret =  redis.sismember("key","222");std::cout<<"222-ret:"<<ret<<std::endl;ret =  redis.sismember("key","111");std::cout<<"111-ret:"<<ret<<std::endl;

在这里插入图片描述

scard

  std::cout<<"scard "<<std::endl;redis.flushall();redis.sadd("key",{"222","333","444"});long long result = redis.scard("key");std::cout<<"result:"<<result<<std::endl;

在这里插入图片描述

spop

 std::cout<<"spop "<<std::endl;redis.flushall();redis.sadd("key",{"111","222","333","444"});auto result = redis.spop("key");if(result) std::cout<<result.value()<<std::endl;else std::cout<<"result 无效"<<std::endl;

在这里插入图片描述

sinster

 std::cout<<"sinter "<<std::endl;redis.flushall();redis.sadd("key1",{"222","333","444"});redis.sadd("key2",{"111","222","333"});std::set<string> result;auto it = std::inserter(result,result.end()); redis.sinter({"key1","key2"},it);for(const auto&elem:result){std::cout<<elem<<std::endl;}

在这里插入图片描述

sinterstore

 std::cout<<"sinterstore "<<std::endl;redis.flushall();redis.sadd("key1",{"222","333","444"});redis.sadd("key2",{"111","222","333"});long long len = redis.sinterstore("key3",{"key1","key2"});std::cout<<"len: "<<len<<std::endl;std::set<string> result;auto it  = std::inserter(result,result.end());redis.smembers("key3",it);for(const auto&x:result){std::cout<<x<<std::endl;}

在这里插入图片描述

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

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

相关文章

Windows控制台中文乱码怎么解决?(nes,一些exe窗口程序)

当我们打开一些Window窗口程序出现中文乱码时&#xff0c;可以像这样设置一下&#xff01; 1、打开 设置-->时间和语言-->语言和区域 2、 管理语言设置 3、更改系统区域设置 4、取消勾选 Beta版&#xff1a;UTF-8 5、效果演示 这下中文不乱码了&#xff01;

多维系统下单点登录之生产实践(2种方案3种实践)

1、基于 Cookie 跨域与分布式 Session 的技术实践 1、XXL-SSO 整体价格 2、实现原理剖析 首次请求 第二次请求 跨域请求 注销流程 3、案例演示 首次登陆跳转至统一认证中心 访问&#xff1a;http://xxlssoclient1.com:8081/ 登陆成功&#xff0c;写入 Cookie&#…

MySQL record 06 part

事务、存储过程 事务&#xff1a; MySQL的同步&#xff0c;同步是指 together done&#xff0c;要么一起前进&#xff0c;要么一起后退的意思。 注意&#xff0c;回滚 rollback 对已经提交 commit 的数据是无效的&#xff0c;也就是说&#xff0c;只能对没有被提交 commit …

【iOS】KVC的学习

【iOS】KVC的学习 文章目录 【iOS】KVC的学习前言KVC定义KVC设值KVC取值KVC使用keyPathKVC处理异常处理nil异常 KVC的一些应用修改动态的设置值实现高阶的消息传递 小结 前言 笔者简单学习了有关与KVC的相关内容&#xff0c;这里写一篇博客简单介绍一下相关内容。 KVC 定义 KV…

saas收银系统源码

1. 线下门店多样化收银 ①门店有社区小店、也会有大店&#xff0c;甚至还会有夫妻店&#xff0c;同时还要有Windows版和安卓版&#xff0c;需满足不同门店的收银需求。 ②支持Windows收银、安卓收银、无人自助收银、聚合码收银等&#xff0c;支持ai智能称重、收银称重一体机等…

『功能项目』QFrameWorkBug拖拽功能【66】

我们打开上一篇65QFrameWork道具栏物品生成的项目&#xff0c; 本章要做的事情是实现物品的拖拽功能 修改脚本&#xff1a;UISlot.cs 实现接口后编写脚本&#xff1a; using UnityEngine; using UnityEngine.EventSystems; using UnityEngine.UI; namespace QFramework {publi…

Netty+HTML5+Canvas 网络画画板实时在线画画

采用Html5的canvas做前端画画板&#xff0c;发送数据到后端Netty服务&#xff0c;实时转发笔迹数据&#xff0c;在线实时同步画笔轨迹&#xff0c;单击绿色小方块&#xff0c;保存画板的图片 页面&#xff1a; <!-- index.html --><!DOCTYPE html> <html> …

[Linux]:信号(下)

✨✨ 欢迎大家来到贝蒂大讲堂✨✨ &#x1f388;&#x1f388;养成好习惯&#xff0c;先赞后看哦~&#x1f388;&#x1f388; 所属专栏&#xff1a;Linux学习 贝蒂的主页&#xff1a;Betty’s blog 1. 信号的阻塞 1.1 基本概念 信号被操作系统发送给进程之后&#xff0c;进程…

机器学习05-聚类算法(python)SC(轮廓系数)详解

# 导入必要的库 from sklearn.cluster import KMeans # 导入 KMeans 聚类算法 import matplotlib.pyplot as plt # 导入 matplotlib 用于绘图 from sklearn.datasets import make_blobs # 导入 make_blobs 用于生成模拟数据 from sklearn.metrics import silhouette_score …

react:组件通信

组件通信 父组件向子组件通信 function App() {return (<div><div>这是父组件</div><Child name"这是子组件" /></div>); }// 子组件 function Child(props) {return <div>{props.name}</div>; }props说明 props可以传…

浅谈计算机视觉的学习路径1

计算机视觉&#xff08;Computer Vision, CV&#xff09;是人工智能领域的一个重要分支&#xff0c;它的目标是使计算机能够像人类一样理解和处理图像和视频数据。 面向想要从事该方向的大学生&#xff0c;笔者这里给出以下是关于计算机视觉的学习路径建议&#xff1a; 简要了解…

Linux开发工具(git、gdb/cgdb)--详解

目录 一、Linux 开发工具分布式版本控制软件 git1、背景2、使用 git&#xff08;1&#xff09;预备工作——安装 git&#xff1a;&#xff08;2&#xff09;克隆远程仓库到本地&#xff08;3&#xff09;把需要提交的代码拷贝到本地仓库&#xff08;4&#xff09;提交本地仓库文…

一种新的电子邮件攻击方式:AiTM

新的攻击组利用合作伙伴组织之间的信任关系来绕过多重身份验证。 一种新的攻击方式开始出现&#xff0c;它利用合作伙伴组织之间的信任关系绕过多重身份验证。在一个利用不同组织之间关系的攻击中&#xff0c;攻击者成功地对四家或更多组织进行了商业电子邮件欺诈(BEC)攻击&…

VM-Ubantu中使用vscode头文件报错——解决办法

问题 系统中头文件明明存在但是却报错 解决方法 在报错的文件中点击&#xff0c;shift ctrl p选择Edit Configurations(JSON) 修改文件内容 原文件内容 修改之后的内容 {"configurations": [{"name": "Linux","includePath":…

计算机毕业设计推荐-基于python大数据的个性化图书数据可视化分析

&#x1f496;&#x1f525;作者主页&#xff1a;毕设木哥 精彩专栏推荐订阅&#xff1a;在 下方专栏&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb; 实战项目 文章目录 实战项目 一、个性化图书数据可视化分析-项…

828华为云征文 | 云服务器Flexus X实例:开源项目 LangChain 部署,实例测试

目录 一、LangChain 介绍 二、部署 LangChain 2.1 安装 langchain 2.2 安装 langchain_community 2.3 安装 qianfan 三、实例运行 3.1 Chat Models 3.2 LLMs 3.3 Embedding Models 四、总结 本篇文章主要通过 Flexus云服务器X实例 部署开源项目 LangChain&#xff0c…

【每日一题】LeetCode 2374.边积分最高节点(图、哈希表)

【每日一题】LeetCode 2374.边积分最高节点&#xff08;图、哈希表&#xff09; 题目描述 给定一个有向图&#xff0c;图中包含 n 个节点&#xff0c;节点编号从 0 到 n - 1。每个节点都有一个出边&#xff0c;指向图中的另一个节点。图由一个长度为 n 的整数数组 edges 表示…

【Linux学习】基本指令其一

命令行界面 命令行终端是一个用户界面&#xff0c;允许用户通过输入文本命令与计算机系统进行交互。 比如Windows下&#xff0c; 键入winR&#xff0c;然后输入cmd&#xff0c;就可以输入文本指令与操作系统交互了。 Windows有另一个命令行界面Powershell,它的功能比cmd更强大…

江协科技STM32学习- P15 TIM输出比较

&#x1f680;write in front&#x1f680; &#x1f50e;大家好&#xff0c;我是黄桃罐头&#xff0c;希望你看完之后&#xff0c;能对你有所帮助&#xff0c;不足请指正&#xff01;共同学习交流 &#x1f381;欢迎各位→点赞&#x1f44d; 收藏⭐️ 留言&#x1f4dd;​…

【开源】LVGL+FreeRTOS 基于STM32F411CEU6的健康助手项目制作

视频演示 【开源】LVGLFreeRTOS 基于STM32F411的智能健康助手小项目 网盘链接在最底下&#xff01;&#xff01;&#xff01;无套路&#xff01;&#xff01;&#xff01;直接分享&#xff01;&#xff01;&#xff01; 硬件介绍 STM32F411CEU6 主控 TFT 1.8inch 显示屏 DTH…