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

news2024/9/21 13:52:04

文章目录

    • 通用命令
      • 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::ALWAYS
    redis.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;//使用字面值常量 3s
    std::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);//NX
    auto value = redis.get("key");
    std::cout<<"NX 不存在则设置——value:"<<value.value()<<std::endl;
    redis.set("key","222",0s,sw::redis::UpdateType::EXIST);//XX
    value = 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")});
    //第二种写法,可以吧多个键值对提前组织到容器中,以迭代器的形式告诉mset
    vector<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.coloradmin.cn/o/2152490.html

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

相关文章

回归预测 | Matlab实现INFO-HKELM向量加权算法优化混合核极限学习机多变量回归预测

回归预测 | Matlab实现INFO-HKELM向量加权算法优化混合核极限学习机多变量回归预测 目录 回归预测 | Matlab实现INFO-HKELM向量加权算法优化混合核极限学习机多变量回归预测效果一览基本介绍程序设计参考资料 效果一览 基本介绍 1.Matlab实现INFO-HKELM向量加权算法优化混合核极…

使用Python和Proxy302代理IP高效采集Bing图片

目录 项目背景一、项目准备环境配置 二、爬虫设计与实现爬虫设计思路目标网站分析数据获取流程 代码实现1. 初始化爬虫类&#xff08;BingImageSpider&#xff09;2. 创建存储文件夹3. 获取图像链接4. 下载图片5. 使用Proxy302代理IP6. 主运行函数 运行截图 三、总结 项目背景 …

2024/9/21 leetcode 19题 24题

目录 19.删除链表中的倒数第n个结点 题目描述 题目链接 解题思路与代码 24.两两交换链表中的结点 题目描述 题目链接 解题思路与代码 19.删除链表中的倒数第n个结点 题目描述 给你一个链表&#xff0c;删除链表的倒数第 n 个结点&#xff0c;并且返回链表的头结点。 示…

Kyutai开源实时语音对话模型Moshi

新闻 法国人工智能实验室Kyutai在巴黎举行的一次活动上推出了能够进行自然交互的对话式人工智能助手Moshi&#xff0c;并计划将其作为开源技术发布。Kyutai表示&#xff0c;Moshi是首款可公开访问的人工智能助手&#xff0c;可实现实时对话&#xff0c;有别于OpenAI的GPT-4o&a…

mybatis 和 mybatis-plus

mybatis 配置 1.新建MAVEN项目 2.配置mybatis依赖 <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0"xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocatio…

基于YOLOv5s的无人机航拍输电线瓷瓶检测(附数据集与操作步骤)

本文主要内容:详细介绍了无人机航拍输电线瓷瓶检测的整个过程&#xff0c;从创建数据集到训练模型再到预测结果全部可视化操作与分析。 文末有数据集获取方式&#xff0c;请先看检测效果 现状 输电线路绝缘瓷瓶的检测主要依赖人工巡检。巡检人员需携带专业设备&#xff0c;攀…

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单击鼠标左键打开…

毕业设计选题:基于ssm+vue+uniapp的捷邻小程序

开发语言&#xff1a;Java框架&#xff1a;ssmuniappJDK版本&#xff1a;JDK1.8服务器&#xff1a;tomcat7数据库&#xff1a;mysql 5.7&#xff08;一定要5.7版本&#xff09;数据库工具&#xff1a;Navicat11开发软件&#xff1a;eclipse/myeclipse/ideaMaven包&#xff1a;M…

大数据实验一: Linux系统安装和使用

一、实验目的 描述Ubuntu的安装过程&#xff1b;使用命令完成Ubuntu中的基础操作&#xff1b; 二、实验平台 操作系统&#xff1a;window系统&#xff1b;内存&#xff1a;4G以上&#xff1b;硬盘&#xff1a;100GB以上&#xff1b;Virtual Box或者VMware&#xff1b;Ubuntu…

如何用1024张显卡训练一个模型

最近看到知乎一个回答&#xff0c;把千卡训练的难度吹上天了。但其实真正用过千卡就会发现也就那么几个点。于是想写一篇文章简单讲讲。 本文将包括几个部分&#xff1a; 首先我们将讨论千卡训练的难题&#xff0c;以及应该在什么时候使用千卡训练&#xff1b; 接着&#xff…

品牌建设是什么?怎么做好品牌建设?

品牌建设&#xff0c;是每个公司品牌形象树立过程中所做的一系列动作&#xff0c;旨在与目标市场建立情感联系&#xff0c;并在竞争激烈的市场中为企业或产品赢得认同和忠诚度。要做好品牌建设&#xff0c;公司首先要明确自己的品牌定位&#xff0c;然后在通过一些品牌建设策略…

Java调用数据库 笔记06 (修改篇)

1.创建Java的普通class类 2.加载驱动 Class.forName("com.mysql.jdbc.Driver"); 3.驱动管理类调用方法进行连接&#xff0c;得到连接对象 DriverManager.getConnection(url, user, password); 其中设置参数&#xff1a; static final String url "jdbc:my…

2024年上海小学生古诗文大会倒计时一个月:做2024官方模拟题

2024年上海市小学生古诗文大会自由参赛的初赛将于10月19日开始&#xff0c;还有不到一个月的时间。 今天好真题继续带着大家来继续做官方2024年小学生古诗文大会的官方模拟题。 【温馨提示】我给每一道题都独家制作了解析&#xff0c;便于孩子理解和熟记题目背后的知识点&…

【python设计模式6】行为型模式1

目录 责任链模式 观察者模式 责任链模式 责任链模式的内容&#xff1a;使多个对象都有机会处理请求&#xff0c;从而避免请求的发送者和接收者之间的耦合关系。将这些对象连成一条链并沿着这条链传递该请求&#xff0c;直到有一个对象处理它为止。责任链的角色有抽象处理者、…

b2b2c商城系统好用么 多用户商城系统四大盈利模式

商淘云B2B2C商城系统能帮助企业快速搭建企业自己的多用户商城系统&#xff0c;它提供了多种功能&#xff0c;如多商家管理、订单处理、支付模块集成等&#xff0c;适合各种规模的企业。用户界面友好&#xff0c;且支持定制化&#xff0c;能满足不同业务需求。 多用户商城有四大…

【ARM】A64指令介绍及内存屏障和寄存器

A64指令集介绍 ISA : Instruction System Architecture 指令集总结 跳转指令 使用跳转指令直接跳转&#xff0c;跳转指令有跳转指令B&#xff0c;带链接的跳转指令BL &#xff0c;带状态切换的跳转指令BX。 B 跳转指令&#xff0c;跳转到指定的地址执行程序。 BL 带链接的跳…

.NET周刊【9月第3期 2024-09-15】

国内文章 关于.NET在中国为什么工资低的分析 https://www.cnblogs.com/thinkingmore/p/18406244 .NET在中国开发者的薪资偏低&#xff0c;主要因市场需求、技术栈选择和企业文化等因素所致。历史上&#xff0c;.NET曾因微软的闭源策略发展受限&#xff0c;尽管后来推出了跨平…

传输层协议 —— TCP协议(下篇)

目录 0.前言 1.流量控制 什么是流量控制&#xff1f; 如何做到流量控制&#xff1f; 窗口探测 PSH标志位与流量控制 一个问题 2.滑动窗口 为什么要有滑动窗口&#xff1f; 滑动窗口在哪&#xff1f; 滑动窗口到底是什么&#xff1f; 滑动窗口的工作原理 滑动窗口中…

Java——认识String类

在 C 语言中已经涉及到字符串了&#xff0c;但是在 C 语言中要表示字符串只能使用字符数组或者字符指针&#xff0c;可以使用标准库提供的字符串系列函数完成大部分操作&#xff0c;但是这种将数据和操作数据方法分离开的方式不符合面相对象的思想&#xff0c;而字 符串应用又非…

【射频通信电子线路基础第五讲】噪声、噪声系数和灵敏度

一、噪声 确定信号对应的是干扰&#xff0c;而随机信号对应的是噪声&#xff0c;噪声又分为系统内部的噪声和外部对系统的噪声。 1、电阻热噪声 &#xff08;1&#xff09;无源有耗网络的热噪声 &#xff08;2&#xff09;热噪声通过线性网络 &#xff08;3&#xff09;等效噪…