Redis——redispluspls库——通用命令以及String类型相关接口使用

文章目录

    • 通用命令
      • get,set
      • keys
        • 插入迭代器
      • expire和ttl
      • type
    • string 类型接口
      • set和get
      • set NX和XX
      • mset 和 mget
      • getrange 和 setrange
      • incr 和 decr

通用命令

get,set

void get_set_test(sw::redis::Redis& redis){//bool set(const sw::redis::StringView &key,   这里的StringView类型是只读版本的字符串//const sw::redis::StringView &val, //bool keepttl, //sw::redis::UpdateType type = sw::redis::UpdateType::ALWAYSredis.flushall();redis.set("k1","111");redis.set("k2","222");redis.set("k3","333");//返回值是optional类型auto value1 = redis.get("k1");std::cout<<"value="<<value1.value()<<std::endl;auto value2 = redis.get("k2");std::cout<<"value="<<value2.value()<<std::endl;auto value3 = redis.get("k3");std::cout<<"value="<<value3.value()<<std::endl;auto value4 = redis.get("k4");std::cout<<"value="<<value4.value()<<std::endl;//对于非法状态的optional的非法状态,进行取值操作,就会抛出异常//对于这个返回值可以做出判定(会隐式转换为布尔类型)//if(value) std::cout<<"value="<<value4.value()<<std::endl;
}

进行单元测试的时候,清除数据是放到开始,还是结束呢?答案是放在开始更好点

如果放在结束,一旦执行的程序中间出现了异常,就可能导致 清理代码 没有执行到

如果代码中间的位置出现了抛异常,那么末尾的flashall就不会被执行,jj这和释放指针一个道理,

在这种场景下就会造成指针未释放而造成的内存泄漏

keys

    redis.flushall();redis.set("k1","111");redis.set("k2","222");redis.set("k3","333");redis.set("k4","444");redis.set("k5","555");redis.set("k6","666");//key的第二个参数是一个“插入迭代器”,咱们需要先准备好一个保存结果的容器//接下来再创建一个插入迭代器指向容器的位置,就可以把keys获取到的结果依次通过刚才的插入迭代器插入到容器的指定位置中//void keys<Output>(const sw::redis::StringView &pattern, Output output)vector<string> result;auto it = std::back_inserter(result);redis.keys("*",it);//printContainer(result);for(const auto& elem:result{std::cout<<elem<<std::endl;}

在这里插入图片描述

插入迭代器

在STL中有五种迭代器类型

  1. 输入迭代器
  2. 输出迭代器
  3. 前向迭代器
  4. 双向迭代器
  5. 随机访问迭代器

例如在写算法题的时候经常会用到的sort,这里面传参的迭代器 就是随机访问迭代器

插入迭代器,本质上是一种输出迭代器,通常,一个迭代器主要表示的是一个“位置”,插入迭代器则是,“位置”+“动作”

  • front_insert_iterator 区间的开头,往前面插入
  • back_insert_iterator 区间的末尾,往后面插入
  • insert_iterator 区间的任意位置,往该位置之前插入

expire和ttl

void expire_test(sw::redis::Redis& redis){using namespace std::chrono_literals;//使用字面值常量 3sstd::cout<<"expire and ttl"<<std::endl;redis.flushall();redis.set("key","111");//bool expire(const sw::redis::StringView &key, const std::chrono::seconds &timeout)redis.expire("key",std::chrono::seconds(10));//设置过期时间//long long ttl(const sw::redis::StringView &key)std::this_thread::sleep_for(3s);auto time =  redis.ttl("key");std::cout<<time<<std::endl;
}

在这里插入图片描述

type

void type_test(sw::redis::Redis& redis){std::cout<<"type"<<std::endl;redis.flushall();redis.set("key1","111");auto type1 =  redis.type("key");std::cout<<type1<<std::endl;redis.lpush("key2","1,2,3,4");auto type2 =  redis.type("key2");std::cout<<type2<<std::endl;redis.hset("key3","aaa","111");auto type3 =  redis.type("key3");std::cout<<type3<<std::endl;redis.sadd("key4","aaa");auto type4 =  redis.type("key4");std::cout<<type4<<std::endl;redis.zadd("key5","吕布",99);auto type5 =  redis.type("key5");std::cout<<type5<<std::endl;}

在这里插入图片描述

string 类型接口

set和get

set带有超时时间

  redis.flushall();std::cout<<"set 带有超时时间"<<std::endl;// using namespace std::chrono_literals;redis.set("key1","111",std::chrono::seconds(10));std::this_thread::sleep_for(std::chrono::seconds(3));std::cout<<redis.ttl("key1")<<std::endl;

在这里插入图片描述

set NX和XX

 using namespace std::chrono_literals;redis.flushall();std::cout<<"set NX 和 XX"<<std::endl;//set的重载版本中,没有单独提供NX和XX的版本,必须搭配过期时间的版本使用redis.set("key","111",0s,sw::redis::UpdateType::NOT_EXIST);//NXauto value = redis.get("key");std::cout<<"NX 不存在则设置——value:"<<value.value()<<std::endl;redis.set("key","222",0s,sw::redis::UpdateType::EXIST);//XXvalue = redis.get("key");std::cout<<"XX 存在则设置——value:"<<value.value()<<std::endl;

在这里插入图片描述

mset 和 mget

 using namespace std::chrono_literals;redis.flushall();std::cout<<"mset 和 mget"<<std::endl;//第一种写法,使用初始化列表描述多个键值对// redis.mset({std::make_pair("key1","111"),std::make_pair("key2","222"),std::make_pair("key3","333")});//第二种写法,可以吧多个键值对提前组织到容器中,以迭代器的形式告诉msetvector<std::pair<string,string>> keys = {{"key1","111"},{"key2","222"},{"key3","333"}};redis.mset(keys.begin(),keys.end());vector<sw::redis::OptionalString> result;auto it  = std::back_inserter(result);redis.mget({"key1","key2","key3"},it);for(const auto& elem:result){if(elem) std::cout<<elem.value()<<std::endl;else std::cout<<"元素无效"<<std::endl;}

在这里插入图片描述

getrange 和 setrange

 std::cout<<"getrange 和 setrange"<<std::endl;redis.flushall();redis.set("key","abcdefghijk");string result = redis.getrange("key",2,5);std::cout<<"result:"<<result<<std::endl;redis.setrange("key",2,"xyz");auto value = redis.get("key");std::cout<<"value:"<<value.value()<<std::endl;

在这里插入图片描述

incr 和 decr

 std::cout<<"incr 和 decr"<<std::endl;redis.flushall();redis.set("key","100");//incr和decr得到的是long long 类型[使用这个更多一些]long long result = redis.incr("key");std::cout<<"result:"<<result<<std::endl;auto value = redis.get("key");std::cout<<"value:"<<value.value()<<std::endl;result = redis.decr("key");std::cout<<"result:"<<result<<std::endl;value = redis.get("key");std::cout<<"value:"<<value.value()<<std::endl;

在这里插入图片描述

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

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

相关文章

Iterative Regularized Policy Optimization with Imperfect Demonstrations

ICML 2024 paper code Intro 利用基于次优专家数据的专家策略&#xff0c;通过policy constraint的形式引导智能体的在线优化&#xff0c;同时通过利用在线高质量数据扩展专家数据&#xff0c;并有监督得对专家策略进行矫正。二者交替优化实现目标策略的迭代更新 Method 上述…

51单片机-红外遥控器(NEC标准)-实验(红外遥控及调速电机)

作者&#xff1a;Whappy 时间&#xff1a;2024.9.20 总结一下&#xff01;基础实验到这儿里就圆满结束&#xff0c;历经25天&#xff0c;将51单片机学完并亲自手敲代码近5000行&#xff0c;在手敲代码过程中&#xff0c;明显感觉的看和敲&#xff0c;明显就是不同的感觉&…

STM32 通过 SPI 驱动 W25Q128

目录 一、STM32 SPI 框图1、通讯引脚2、时钟控制3、数据控制逻辑4、整体控制逻辑5、主模式收发流程及事件说明如下&#xff1a; 二、程序编写1、SPI 初始化2、W25Q128 驱动代码2.1 读写厂商 ID 和设备 ID2.2 读数据2.3 写使能/写禁止2.4 读/写状态寄存器2.5 擦除扇区2.6 擦除整…

基于SpringBoot的在线点餐系统【附源码】

​基于SpringBoot的高校社团管理系统&#xff08;源码L文说明文档&#xff09; 4 系统设计 4.1 系统概述 网上点餐系统的结构图4-1所示&#xff1a; 图4-1 系统结构 模块包括主界面&#xff0c;首页、个人中心、用户管理、美食店管理、美食分类管理、美食…

前端开发者必学:mo.js动画库

前端开发者必学&#xff1a;mo.js动画库 前言 在当今的网页设计中&#xff0c;动态效果和交互性是提升用户体验的关键因素。 mo.js&#xff0c;一个轻量级的 JavaScript 动画库&#xff0c;为前端开发者提供了一种简单而强大的方法来创建引人注目的动画效果。 本文将向您介…

Nature|PathChat:病理学多模态生成性AI助手的创新与应用|顶刊精析·24-09-21

小罗碎碎念 今日顶刊&#xff1a;Nature 这篇文章今年6月就发表了&#xff0c;当时我分析的时候&#xff0c;还是预印本&#xff0c;没有排版。今天第一篇推文介绍的是Faisal Mahmood &#xff0c;所以又把这篇文章拉出来详细分析一下。 作者角色作者姓名单位名称单位英文名称第…

目标拟合椭圆

对于目标区域&#xff0c;the ellipse fit is computing by matching second-order moments.

【C/C++】速通涉及string类的经典编程题

【C/C】速通涉及string类的经典编程题 一.字符串最后一个单词的长度代码实现&#xff1a;&#xff08;含注释&#xff09; 二.验证回文串解法一&#xff1a;代码实现&#xff1a;&#xff08;含注释&#xff09; 解法二&#xff1a;&#xff08;推荐&#xff09;1. 函数isalnum…

Linux文件IO(六)-多次打开同一个文件

大家看到这个小节标题可能会有疑问&#xff0c;同一个文件还能被多次打开&#xff1f;事实确实如此&#xff0c;同一个文件可以被多次打开&#xff0c;譬如在一个进程中多次打开同一个文件、在多个不同的进程中打开同一个文件&#xff0c;那么这些操作都是被允许的。本小节就来…

Linux软件包管理器、Linux开发工具、vim的配置等的介绍

文章目录 前言一、Linux软件包管理器yum二、Linux开发工具1. 命令模式2. 插入模式3. 底行模式4. 三种模式的切换5. 命令模式下的快捷键 三、vim的配置总结 前言 Linux软件包管理器、Linux开发工具、vim的配置等的介绍 一、Linux软件包管理器yum 关于rzsz 这个工具用于 window…

动手学深度学习(李沐)PyTorch 第 2 章 预备知识

2.1 数据操作 N维数组样例 N维数组是机器学习和神经网络的主要数据结构 张量表示一个由数值组成的数组&#xff0c;这个数组可能有多个维度。 具有一个轴的张量对应数学上的向量&#xff08;vector&#xff09;&#xff1b; 具有两个轴的张量对应数学上的矩阵&#xff08;…

MySQL高阶1843-可疑银行账户

目录 题目 准备数据 ​分析数据 实现 总结 题目 如果一个账户在 连续两个及以上 月份的 总收入 超过最大收入&#xff08;max_income&#xff09;&#xff0c;那么认为这个账户 可疑。 账户当月 总收入 是当月存入资金总数&#xff08;即 transactions 表中 type 字段的…

【Unity-UGUI组件拓展】| Image 组件拓展,支持FIlled和Slice功能并存

🎬【Unity-UGUI组件拓展】| Image 组件拓展,支持FIlled和Slice功能并存一、组件介绍二、组件拓展方法三、完整代码💯总结🎬 博客主页:https://xiaoy.blog.csdn.net 🎥 本文由 呆呆敲代码的小Y 原创,首发于 CSDN🙉 🎄 学习专栏推荐:Unity系统学习专栏 🌲 游戏…

C / C++的内存管理

前言 Hello&#xff0c;我又回来了&#xff0c;今天我们将继续学习C部分&#xff0c;今天我们将承接前面的知识&#xff0c;继续学习C的内存管理&#xff0c;今天的内容较为重要&#xff0c;所以我们废话不多说&#xff0c;我们还是按例三连上车&#xff0c;开始我们今天内容&…

Python中lambda表达式的使用——完整通透版

文章目录 一、前言二、 基本语法三、举个简单的例子&#xff1a;四、常见应用场景1. 用于排序函数sort() 方法简介lambda 表达式的作用详细解释进一步扩展总结 2、与 map、filter、reduce 等函数结合1、 map() 函数示例&#xff1a;将列表中的每个数字平方 2、 filter() 函数示…

Typora安装和导入导出

Typora安装和导入导出 文章目录 Typora安装和导入导出前言Typora v1.9.5Typora v1.4.7Pandoc 前言 Typora v1.9是最新版, , Typora v1.4是老版本的, 这两个选择一个即可Pandoc可以导入导出word Typora v1.9.5 Typora v1.9.rar, 提取码&#xff1a;tian按ctrl单击鼠标左键打开…

数据飞轮崛起:数据中台真的过时了吗?

一、数据中台的兴起与困境 随着大数据技术的不断发展&#xff0c;我见证了企业数据能力建设的演变。从数据中台的兴起&#xff0c;到如今数据飞轮模式的热议&#xff0c;企业的数据管理理念经历了巨大的变化。起初&#xff0c;数据中台作为解决数据孤岛、打破部门壁垒的“救星…

新版torch_geometric不存在uniform、maybe_num_nodes函数问题(Prune4ED论文报错解决)

这是在复现论文”“时遇到的报错。 ImportError: cannot import name uniform from torch_geometric.nn.pool.topk_pool 一、报错原因 论文作者使用的是2.1.0版本的torch_geometric。而我安装了2.6.1的torch_geometric。新版中已经去除了uniform和maybe_num_nodes这两个函数&…

力扣 中等 162.寻找峰值

文章目录 题目介绍解法 题目介绍 解法 定理&#xff1a;如果 i<n−1 且 nums[i]<nums[i1]&#xff0c;那么在下标 [i1,n−1] 中一定存在至少一个峰值。证明 思路分析&#xff1a;利用采用红蓝染色题体法&#xff0c;n为数组的长度&#xff0c;开始左指针L指向数组最左边…

CompletableFuture-详解使用及源码解析

背景 上一篇文章我们看了FutureTask&#xff0c;分析了他的问题&#xff0c;异步编程并不方便。 问题1&#xff1a; FutureTask获取执行结果前&#xff0c;主线程需要通过get()方法一直阻塞等待子线程执行完成call方法&#xff0c;才可以拿到返回结果问题2&#xff1a;如果不…