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

news2024/11/16 12:31:13

文章目录

    • 通用命令
      • 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/2154330.html

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

相关文章

Hadoop的安装

文章目录 一. 到Hadoop官网下载安装文件hadoop-3.4.0.tar.gz。二. 环境变量三. 配置 一. 到Hadoop官网下载安装文件hadoop-3.4.0.tar.gz。 随后点击下载即可 由于Hadoop不直接支持Windows系统&#xff0c;因此&#xff0c;需要修改一些配置才能运行 二. 环境变量 三. 配置 进…

《飞机大战游戏》实训项目(Java GUI实现)(设计模式)(简易)

目录 一、最终实现后&#xff0c;效果如下。 &#xff08;1&#xff09;简单介绍本游戏项目&#xff08;待完善&#xff09; &#xff08;2&#xff09;运行效果图&#xff08;具体大家自己可以试&#xff09; 初始运行情况。 手动更换背景图。 通过子弹攻击敌机&#xff0c;累…

如何在Mac上查看剪贴板历史记录

重点摘要 macOS 内建的剪贴簿查看器可以透过 Finder 存取,但只能显示最近一次复制的内容,而且重新开机后就会清除。若要更进阶的剪贴簿管理,第三方 app 像是 CleanClip 提供了强大的功能和更好的组织方式。CleanClip 提供了全方位的剪贴簿历史管理解决方案,支援各种内容类型和…

HarmonyOS鸿蒙开发实战(5.0)表情图片聊天案例实践

鸿蒙HarmonyOS NEXT开发实战往期文章必看&#xff08;持续更新......&#xff09; HarmonyOS NEXT应用开发性能实践总结 HarmonyOS NEXT应用开发案例实践总结合集 最新版&#xff01;“非常详细的” 鸿蒙HarmonyOS Next应用开发学习路线&#xff01;&#xff08;从零基础入门…

线性表一(vector)

#include<bits/stdc.h> using namespace std; vector<int> a(5,2);//定义一个初始长度为5&#xff0c;每个元素值为2的可变数组 vector<char> b(3);//定义一个初始长度为3&#xff0c;每个元素为默认值的可变数组 vector<int> v;//定义一个长度为0的可…

mxnet系统架构

mxnet系统架构 MXNet 是一个高性能、灵活的深度学习框架&#xff0c;最早由李沐&#xff08;Mu Li&#xff09;等人开发&#xff0c;并且得到了 Amazon 的支持。它支持多种语言&#xff08;包括 Python、Scala、C、R、Julia、Perl 等&#xff09;&#xff0c;并以其灵活的编程…

【保奖思路】2024年华为杯研赛B题完整代码建模过程(后续会更新)

您的点赞收藏是我继续更新的最大动力&#xff01; 一定要点击如下的卡片&#xff0c;那是获取资料的入口&#xff01; 点击链接加入【2024华为杯研赛资料汇总】&#xff1a;https://qm.qq.com/q/XzdIsvbiM0https://qm.qq.com/q/XzdIsvbiM0请根据附件WLAN网络实测训练集中所提供…

python多继承 - 子类指定父类

菜鸟教程-面向对象 https://www.runoob.com/python3/python3-class.html 子类内指定父类 父类名称.__init__(self,参数1&#xff0c;参数2&#xff0c;...) 子类对象指定父类 class Parent1:def my_method(self):print("Parent1s my_method")class Parent2:def my_…

基于uni-app的计算机类面试宝设计与实现(毕业论文)

目 录 1 前言 1 1.1 研究目的与意义 1 1.2 研究现状 1 1.3 论文结构 2 2 可行性分析 3 2.1 经济可行性 3 2.2 法律可行性 3 2.3 技术可行性 4 2.4 市场可行性 4 2.5 可行性分析结论 4 3 系统需求分析 4 3.1 用户需求分析 4 3.2 系统功能分析 5 3.3 系统性能需求分析 6 4 概要设…

前端vue-ref与document.querySelector的对比

ref只在本组件中查找&#xff0c;而document.querySelector是在整个页面查找

【学习笔记】手写Tomcat 四

目录 一、Read 方法返回 -1 的问题 二、JDBC 优化 1. 创建配置文件 2. 创建工具类 3. 简化 JDBC 的步骤 三、修改密码 优化返回数据 创建修改密码的页面 注意 测试 四、优化响应动态资源 1. 创建 LoginServlet 类 2. 把登录功能的代码放到 LoginServlet 类 3. 创…

hackmyvm靶场--zon

环境 攻击机kali 靶机 未知 主机探测 因为在同一个局域网内使用ARP协议探测存活主机 靶机为192.168.56.128 端口探测 常见的80和22端口 那么一定是寻找web漏洞拿shell了 后台扫描 后台扫描常用dirsearch和gobuster,有时候小字典可能不太行&#xff0c;可以尝试换个大点…

Android SystemUI组件(07)锁屏KeyguardViewMediator分析

该系列文章总纲链接&#xff1a;专题分纲目录 Android SystemUI组件 本章关键点总结 & 说明&#xff1a; 说明&#xff1a;本章节持续迭代之前章节的思维导图&#xff0c;主要关注左侧上方锁屏分析部分即可。 为了更好理解本文的内容&#xff0c;优先说明下SystemUI中与Ke…

电力行业螺钉螺帽螺丝缺失检测数据集 voc yol

电力行业螺钉螺帽螺丝缺失检测数据集 数据集描述 该数据集旨在用于电力行业中的螺钉、螺帽、螺丝等紧固件的缺失检测任务。数据集包含了大量的图像及其对应的标注信息&#xff0c;可用于训练计算机视觉模型&#xff0c;以识别和定位电力设施中的螺钉、螺帽、螺丝等部件是否存在…

Go-知识-定时器

Go-知识-定时器 1. 介绍2. Timer使用场景2.1 设定超时时间2.2 延迟执行某个方法 3. Timer 对外接口3.1 创建定时器3.2 停止定时器3.3 重置定时器3.4 After3.5 AfterFunc 4. Timer 的实现原理4.1 Timer数据结构4.1.1 Timer4.1.2 runtimeTimer 4.2 Timer 实现原理4.2.1 创建Timer…

golang学习笔记1-go程序执行流程

声明&#xff1a;本人已有C&#xff0c;C,Python基础&#xff0c;只写本人认为的重点&#xff0c;方便自己回顾。 命令行执行go程序有两种方式&#xff0c;其流程如下图 注意第一种方式会得到可执行文件&#xff0c;第二种不会。 例1 在当前目录下编译hello.go go build hel…

更换硬盘后,电脑装完系统进不去?或PE能识别硬盘但开机/启动/BIOS识别不了硬盘解决办法

由于现在的电脑主板&#xff0c;默认都是UEFI启动&#xff0c;硬盘只有使用GUID分区表&#xff0c;主板BIOS才找得到系统引导&#xff01; 而当我们拿到一块新硬盘&#xff0c;使用分区工具默认类型分区&#xff0c;默认是MBR类型&#xff0c;所以这种分区的硬盘&#xff0c;B…

【后端开发】JavaEE初阶—线程的理解和编程实现

前言&#xff1a; &#x1f31f;&#x1f31f;本期讲解多线程的知识哟~~~&#xff0c;希望能帮到屏幕前的你。 &#x1f308;上期博客在这里&#xff1a;【后端开发】JavaEE初阶——计算机是如何工作的&#xff1f;&#xff1f;&#xff1f;-CSDN博客 &#x1f308;感兴趣的小伙…

腾讯云ssl证书到期,续期免费证书并部署

首先咱用的免费证书&#xff0c;现在最长90天有效期&#xff0c;今天又到期了&#xff0c;得及时续期避免关联资源访问受限。 我这个证书是关联了一个负载均衡和两个容器服务的&#xff08;如果您的应用是ngnix或其他的应用那和本文操作可能有点不一样&#xff09; 所以需要做…

17【Protues单片机仿真】基于51单片机的太阳能智能谷物翻晒机器人

目录 一、主要功能 二、硬件资源 三、程序编程 四、实现现象 一、主要功能 基于51单片机&#xff0c;避障&#xff0c;低于50CM报警&#xff0c;LED灯亮起&#xff0c;自动翻晒用光敏电阻&#xff0c;光照强度大&#xff0c;电机转动&#xff0c;相当于翻晒粮食&#xff0…