[Redis][String][上]详细讲解

news2025/1/22 21:01:20

目录

  • 0.前言
  • 1.常见命令
    • 1.SET
    • 2.GET
    • 3.MSET && MGET
    • 4.SETNX && SETXX
  • 2.计数命令
    • 1.INCR
    • 2.INCRBY
    • 3.DECR
    • 4.DECYBY
    • 5.INCRBYFLOAT
    • 6.注意


0.前言

  • 字符串类型是Redis最基础的数据类型,关于字符串需要特别注意

    • Redis中所有的键的类型都是字符串类型,⽽且其他⼏种数据结构也都是在字符串类似基础上构建的
      • 例如:列表和集合的元素类型是字符串类型
    • 字符串类型的值实际可以是字符串,包含⼀般格式的字符串 --> 不仅仅可以存储文本数据
      • 类似JSON、XML格式的字符串
      • 数字,可以是整型或者浮点型
      • 甚⾄是⼆进制流数据,
        • 例如:图⽚、⾳频、视频等
          请添加图片描述
  • ⼀个字符串的最⼤值不能超过512MB

  • Redis内部存储字符串完全是按照⼆进制流的形式保存的

    • Redis是不处理字符集编码问题的,客⼾端传⼊的命令中使⽤的是什么字符集编码,就存储什么字符集编码

1.常见命令

1.SET

  • 功能:将string类型的value设置到key
    • 如果key不存在,则创建新的键值对
    • 如果key之前存在,则覆盖,⽆论原来的数据类型是什么(可能会改变原来的数据类型),之前关于此keyTTL也全部失效
  • 语法SET key value [expiration EX seconds|PX milliseconds] [NX|XX]
  • 选项
    • EX seconds:使⽤秒作为单位设置key的过期时间
    • PX milliseconds:使⽤毫秒作为单位设置key的过期时间
    • NX只在key不存在时才进⾏设置,即如果key之前已经存在,设置不执⾏
    • XX只在key存在时才进⾏设置,即如果key之前不存在,设置不执⾏
      • 相当于更新keyvalue
    • 注意:由于带选项的SET命令可以被SETNX, SETEX, PSETEX等命令代替,所以之后的版本中,Redis可能进行合并
  • 返回值
    • 如果设置成功,返回OK
    • 如果由于SET指定了NX或者XX但条件不满⾜,SET不会执⾏,并返回(nil)
  • 时间复杂度 O ( 1 ) O(1) O(1)

2.GET

  • 功能:获取key对应的value
    • 如果key不存在,返回nil
    • 如果value的数据类型不是string,会报错
  • 语法GET key
  • 返回值key对应的value,或者当key不存在时返回nil
  • 时间复杂度 O ( 1 ) O(1) O(1)

3.MSET && MGET

  • MSET:

    • 功能:一次性设置多个key的值
    • 语法MSET key value [key value ...]
    • 返回值:永远是OK
    • 时间复杂度 O ( 1 ) O(1) O(1)
  • MGET

    • 功能:⼀次性获取多个key的值
      • 如果对应的key不存在或者对应的数据类型不是string,返回nil
    • 语法:`MGET key [key …]
    • 返回值:对应value的列表
    • 时间复杂度 O ( 1 ) O(1) O(1)
  • 多次GET和单词MGET比较:使用MGET/MSET可有效减少网络时间,性能较高
    请添加图片描述

  • 综上:学会使⽤批量操作,可以有效提⾼业务处理效率

    • 注意:每次批量操作所发送的键的数量也不是⽆节制的,否则可能造成单⼀命令执⾏时间过⻓,导致Redis阻塞

4.SETNX && SETXX

  • SETNX
    • 功能:设置key-value,但只允许在key之前不存在的情况下
    • 语法SETNX key value
    • 时间复杂度 O ( 1 ) O(1) O(1)
    • 返回值:1表⽰设置成功,0表⽰没有设置
  • SETXX
    • 功能:设置key-value,但只允许在key之前存在的情况下
    • 语法SETXX key value
    • 时间复杂度 O ( 1 ) O(1) O(1)
    • 返回值:1表⽰设置成功,0表⽰没有设置
  • SET、SETNX、SETXX执⾏流程
    请添加图片描述

2.计数命令

1.INCR

  • 功能:将key对应的string表⽰的数字加⼀
    • 如果key不存在,则视为key对应的value0
    • 如果key对应的string不是⼀个整型或者范围超过了64位有符号整型,则报错
  • 语法INCR key
  • 返回值integer类型的加完后的数值
  • 时间复杂度 O ( 1 ) O(1) O(1)

2.INCRBY

  • 功能:将key对应的string表⽰的数字加上对应的值
    • 如果key不存在,则视为key对应的value0
    • 如果key对应的string不是⼀个整型或者范围超过了64位有符号整型,则报错
  • 语法INCRBY key increment
  • 返回值integer类型的加完后的数值
  • 时间复杂度 O ( 1 ) O(1) O(1)

3.DECR

  • 功能:将key对应的string表⽰的数字减⼀
    • 如果key不存在,则视为key对应的value0
    • 如果key对应的string不是⼀个整型或者范围超过了64位有符号整型,则报错
  • 语法DECR key
  • 时间复杂度 O ( 1 ) O(1) O(1)
  • 返回值integer类型的减完后的数值

4.DECYBY

  • 功能:将key对应的string表⽰的数字减去对应的值
    • 如果key不存在,则视为key对应的value0
    • 如果key对应的string不是⼀个整型或者范围超过了64位有符号整型,则报错
  • 语法DECRBY key decrement
  • 时间复杂度 O ( 1 ) O(1) O(1)
  • 返回值integer类型的减完后的数值

5.INCRBYFLOAT

  • 功能:将key对应的string表⽰的浮点数加上对应的值,允许采⽤科学计数法表⽰浮点数
    • 如果对应的值是负数,则视为减去对应的值
    • 如果key不存在,则视为key对应的value0
    • 如果key对应的不是string,或者不是⼀个浮点数,则报错
  • 语法INCRBYFLOAT key increment
  • 时间复杂度 O ( 1 ) O(1) O(1)
  • 返回值:加/减完后的数值

6.注意

  • Redis存储整数,是直接使用int类型存的,而存储小数,本质上是当作字符串来存储
    • Redis的int比较方便算术运算
    • 小数意味着每次进行算术运算,都需要把字符串转成小数,进行运算,再把结果转回字符串保存
  • 很多存储系统和编程语⾔内部使⽤CAS机制实现计数功能,会有⼀定的CPU开销
    • 但在Redis中完全不存在这个问题,因为Redis是单线程架构,任何命令到了Redis服务端都要顺序执⾏
  • 由于Redis处理命令的时候,是单线程模型,多个客户端同时针对同一个key进行INCR等操作,不会引起"线程安全"问题

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

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

相关文章

【Elasticsearch系列十四】Elasticsearch

💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

大数据概念与价值

文章目录 引言大数据的概念高德纳咨询公司的定义麦肯锡全球研究所的定义什么是大数据? 大数据的特征Volume(体积)Variety(种类)Velocity(速度)Value(价值)Veracity&#…

Apache Hudi现代数据湖核心技术概论

1. 什么是 Apache Hudi 1.1 简介 Apache Hudi (Hadoop Upserts Deletes and Incrementals) 是一个开源的数据湖框架,旨在提供高效的数据管理和数据更新功能。它允许在大数据平台上执行诸如数据插入、更新和删除操作,同时支持增量式数据处理。Hudi 最初…

React18入门教程

React介绍 React由Meta公司开发,是一个用于 构建Web和原生交互界面的库 React的优势 相较于传统基于DOM开发的优势 组件化的开发方式 不错的性能 相较于其它前端框架的优势 丰富的生态 跨平台支持 React的市场情况 全球最流行,大厂必备 开发环境…

EmguCV学习笔记 C# 12.2 WeChatQRCode

版权声明:本文为博主原创文章,转载请在显著位置标明本文出处以及作者网名,未经作者允许不得用于商业目的。 EmguCV是一个基于OpenCV的开源免费的跨平台计算机视觉库,它向C#和VB.NET开发者提供了OpenCV库的大部分功能。 教程VB.net版本请访问…

Vue.js的前端框架有哪些?

Vue.js 是一款流行的前端 JavaScript 框架,用于构建单页面应用(SPA)。除了 Vue.js 本身,还有许多基于 Vue.js 的前端框架和 UI 库,它们提供了更多的功能和组件,以便开发者能够快速构建应用程序。以下是一些…

【图像压缩与重构】基于BP神经网络

课题名称:基于BP神经网络的图像压缩与重构(带GUI) 相关资料: 1. 代码注释 2.BP神经网络原理文档资料 3.图像压缩原理文档资料 程序实例截图:

eclipse git 不小心点了igore,文件如何加到git中去。

1、创建了文件,或者利用三方工具,或者用mybatis plus生成了文件以后,我们需要右键文件,然后加入到git中。 右键有问号的java文件 -- Team -- Add to Index ,然后变成个号就可以了。 2、不小心,点了一下Ign…

Mac 上哪个剪切板增强工具比较好用? 好用剪切板工具推荐

在日常文字编辑中,我们经常需要重复使用复制的内容。然而,新内容一旦复制,旧内容就会被覆盖。因此,选择一款易用高效的剪贴板工具成为了许多人的需求。本文整理了一些适用于 macOS 系统的优秀剪贴板增强工具,欢迎大家下…

华为OD机试 - 构成指定长度字符串的个数(Python/JS/C/C++ 2024 E卷 100分)

华为OD机试 2024E卷题库疯狂收录中,刷题点这里 专栏导读 本专栏收录于《华为OD机试真题(Python/JS/C/C)》。 刷的越多,抽中的概率越大,私信哪吒,备注华为OD,加入华为OD刷题交流群,…

想高效开发,也许可以试试文件系统。。。

众所周知,4G-Cat.1模组的文件系统与数据传输速度、存储效率,以及数据安全性等有非常重要的关系,在应用开发中也非常重要。 今天我们来尝试Air201的实用示例——文件系统的使用 Air201文件系统的使用 合宙Air201资产定位模组——是一个集成超…

密集行人数据集 CrowdHumanvoc和yolo两种格式,yolo可以直接使用train val test已经划分好有yolov8训练200轮模型

密集行人数据集 CrowdHuman voc和yolo两种格式,yolo可以直接使用 train val test已经划分好 有yolov8训练200轮模型。 CrowdHuman 密集行人检测数据集 数据集描述 CrowdHuman数据集是一个专为密集行人检测设计的数据集,旨在解决行人密集场景下的检测挑…

【自动驾驶】控制算法(九)深度解析车辆纵向控制 | 从算法基础到 Carsim 仿真实践

写在前面: 🌟 欢迎光临 清流君 的博客小天地,这里是我分享技术与心得的温馨角落。📝 个人主页:清流君_CSDN博客,期待与您一同探索 移动机器人 领域的无限可能。 🔍 本文系 清流君 原创之作&…

【C语言】常见的C语言概念

个人主页 : zxctscl 如有转载请先通知 文章目录 1. 什么是C语言2.C语言的历史3. 编译器的选择VS20223.1 编译和链接3.2 编译器的对比3.3 VS2022的优缺点 4.VS项目和源文件、头文件介绍5. 第一个C语言程序6. main函数7. printf和库函数8. 关键字介绍9. 字符和ASCII编…

【machine learning-十-梯度下降-学习率】

学习率 学习率不同的学习率 在梯度下降算法中,学习率的选择很重要,不恰当的选择,甚至可能导致损失发散,而非收敛,下面就看一下学习率的影响。 学习率 学习率是下图中的红框圈出来的部分, 学习率是模型的超…

Python 复制Excel 中的行、列、单元格

在Excel中,复制行、列和单元格是日常工作中经常需要进行的操作,它可以帮助你快速调整数据布局、复制数据模板或进行数据的批量处理。 本文将详细介绍如何使用Python将Excel中的行、列、或单元格范围复制到指定位置。 所需Python库 要使用Python操作Exc…

今天不写项目,聊聊后端面试吧

首先感谢大家之前的观看呀~兄弟们~ 这边把我去过几家公司面试的题目都写一下哈,像我大二下,就是前两个月7-9进了公司进行后端实习,哎.....反正就是学学学..话不多说~ 1.Frist 1.HashMap实现原理 HashMap是基于哈希表的Map接口的非同步实现…

Zabbix 部署----安装 Zabbix(监控服务器)

目录 zabbix 官网: 1、准备一台虚拟机 1.整理配置yum源(192.xx.xx.10) 2.设置主机名(192.xx.xx.10) 3.防火墙 4.selinux 2、准备Zabbix-repo 使用阿里提供的zabbixYUM源 3、安装Zabbix服务器 4、初始化数据库 1.安装数据库 2.启动数据库 3.授权zabbix账号 4.初始化…

数据结构强化(直播课)

应用题真题分析&备考指南 (三)线性表的应用 (六)栈、队列和数组的应用 (四)树与二叉树的应用 1.哈夫曼(Huffman)树和哈夫曼编码 2.并查集及其应用(重要) (四)图的基本应用 …

74、Python之函数式编程:深入理解惰性求值与生成器

引言 我们在过程式编程或者面向对象编程中(当然也不局限于这些),涉及到计算、数据的转换处理时,通常是执行到对应的语句或者表达式时,就会完成计算或者数据处理。大多数场景下,这样立即计算的方式是没有问…