【Redis】String字符串类型-常用命令

文章目录

  • String字符串类型
    • 常用命令
      • set
      • get
      • MGET
      • MSET
    • 计数命令
      • INCR
      • INCRBY
      • DECR
      • DECRBY
      • INCRBYFLOAT
    • 其它命令
      • APPEND
      • GETRANGE
      • SETRANGE
      • STRLEN
  • 命令总结

String字符串类型

1)⾸先Redis中所有的键的类型都是字符串类型

2)字符串类型的值(value)实际可以是字符串,包含⼀般格式的字符串或者类似JSON、XML格式的字符串,数字(整型或者浮点型);甚⾄是⼆进制流数据,例如图⽚、⾳频、视频等。不过⼀个字符串的最⼤值不能超过512MB

image-20231020215253353

注意:由于Redis内部存储字符串完全是按照⼆进制流的形式保存的,所以Redis是不处理字符集编码问题的,客⼾端传⼊的命令中使⽤的是什么字符集编码,就存储什么字符集编码


常用命令

set

将string类型的value设置到key中。如果key之前存在,则覆盖,⽆论原来的数据类型是什么。之前关于此key的TTL也全部失效

语法:SET key value [expire EX seconds|PX milliseconds] [NX|XX]

选项含义:

  • EX seconds⸺使⽤秒作为单位设置key的过期时间
  • PX milliseconds ⸺使⽤毫秒作为单位设置key的过期时间
  • NX ⸺只在key不存在时才进⾏设置,即如果key已经存在,设置不执行
  • XX ⸺只在key存在时才进⾏设置,即如果key如果不存在,设置不执行

返回值:

  • 如果设置成功,返回OK

  • 如果由于SET指定了NX或者XX但条件不满⾜,SET不会执⾏,并返回(nil)

时间复杂度: O ( 1 ) O(1) O(1)

image-20231023110504258


注意:由于带选项的SET命令可以被 SETNX 、 SETEX 、 PSETEX 等命令代替

setnx

key-value不存在才能设置,如果存在则设置失败

语法:SETNX key value 

返回值:1表⽰设置成功。0表⽰没有设置

image-20231021100802760

image-20231023110559798


setex

设置key的过期时间,单位是秒

语法:SETEX key seconds value

image-20231025210135043

psetex

设置key的过期时间,单位是毫秒

语法:PSETEX key milliseconds value

image-20231025210154703


get

获取key对应的value。如果key不存在,返回nil。如果value的数据类型不是string,会报错。

语法:GET key 	

返回值:key对应的value,或者nil当key不存在

image-20231023111010299


MGET

⼀次性获取多个key的值。如果对应的key不存在或者对应的数据类型不是string,返回nil

语法:MGET key [key ...]

时间复杂度: O ( N ) O(N) O(N),其中 N N N为key的数量

返回值:对应value的列表

image-20231023110634111

MSET

⼀次性设置多个key的值

语法:MSET key value [key value ...]

时间复杂度: O ( N ) O(N) O(N),其中 N N N为key的数量

返回值:永远是OK

image-20231023110723323


多次get和单词mget的区别:

image-20231021100431215

使⽤mget/mset由于可以有效地减少了⽹络时间,所以性能相较更⾼。使⽤批量操作,可以有效提⾼业务处理效率,但是要注意,每次批量操作所发送的键的数量也不是⽆节制的,否则可能造成单⼀命令执⾏时间过⻓,导致Redis阻塞


计数命令

很多存储系统和编程语⾔内部使⽤CAS机制实现计数功能,会有⼀定的CPU开销,但在Redis中完全不存在这个问题,因为Redis是单线程架构,任何命令到了Redis服务端都要顺序执⾏

INCR

将key对应的string表⽰的数字加⼀。如果key不存在,则视为key对应的value是0,然后对应+1。如果key对应的string不是⼀个整型或者范围超过了64位有符号整型,则报错

语法:INCR KEY

返回值:integer类型的加完后的数值

image-20231023111307194


INCRBY

将key对应的string表⽰的数字加上对应的值。如果key不存在,则视为key对应的value是0。如果key对应的string不是⼀个整型或者范围超过了64位有符号整型,则报错

语法:INCRBY key decrement  #decrement可以是正数,负数,0  但不可能是浮点数

返回值:integer类型的加完后的数值

image-20231023111613183


DECR

将key对应的string表⽰的数字减⼀。如果key不存在,则视为key对应的value是0。如果key对应的string不是⼀个整型或者范围超过了64位有符号整型,则报错

语法:DECR key 

返回值:integer类型的减完后的数值


DECRBY

将key对应的string表⽰的数字减去对应的值。如果key不存在,则视为key对应的value是0。如果key对应的string不是⼀个整型或者范围超过了64位有符号整型,则报错

语法:DECRBY key decrement  #decrement可以是正数,负数,0  但不可能是浮点数

返回值:integer类型的减完后的数值


INCRBYFLOAT

将key对应的string表⽰的浮点数加上对应的值。如果对应的值是负数,则视为减去对应的值。如果key不存在,则视为key对应的value是0。如果key对应的不是string,或者不是⼀个浮点数,则报错。允许采⽤科学计数法表⽰浮点数

语法:INCRBYFLOAT key increment

返回值:加/减完后的数值

image-20231023112239477


注意:上述操作的时间复杂度都是 O ( 1 ) O(1) O(1),因为redis处理命令的时候是单线程模型,多个客户端同时对同一个key进行计数命令操作不会引起线程安全问题


其它命令

APPEND

如果key已经存在并且是⼀个string,命令会将value追加到原有string的后边。如果key不存在,则效果等同于SET命令

语法:APPEND KEY VALUE

时间复杂度: O ( 1 ) O(1) O(1) 追加的字符串⼀般⻓度较短,可以视为 O ( 1 ) O(1) O(1)

返回值:追加完成之后string的⻓度,单位是字节

image-20231023112528941


image-20231025210626806

redis不会对字符编码做任何处理,redis不认识字符,只认识字节,xshell默认的字符编码是utf8,所以汉字也是按照utf8进行编码的,在utf8当中,一个汉字占用3个字节,因为append返回的是追加之后string的⻓度,单位是字节,所以为6。通过get命令进行获取的时候,是按照原始的utf-8编码,以16进制的方式进行展示 :\x表示16进制

注意:在启动redis的时候,可以加上--raw选项,可以使redis客户端自动将二进制数据尝试翻译

image-20231025210920354


GETRANGE

返回key对应的string的⼦串,由start和end确定(左闭右闭)。可以使⽤负数表⽰倒数。-1代表倒数第⼀个字符,-2代表倒数第⼆个,其他的与此类似。超过范围的偏移量会根据string的⻓度调整成正确的值

作用:截取子串

语法:GETRANGE key start end

时间复杂度:O(N),N为 [ s t a r t , e n d ] [start,end] [start,end]区间的⻓度.由于string通常⽐较短,可以视为是O(1) 返回值:string类型的⼦串

image-20231023112735582

正常下标都是从0开始的整数,但是redis的下标是可以支持负数的,其中-1代表的是最后一个元素


注意:如果字符串当中保存的是汉字,此时进行子串切分,很有可能切出来的是不完整的汉字,此结果在utf8码表当中不知道能查出什么


SETRANGE

覆盖字符串的⼀部分,从指定的偏移开始

语法:SETRANGE key offset value
  • offset:偏移量 ,从第几个字节开始进行替换
  • value:要替换后的结果,替换多长具体是看value的长度

时间复杂度:O(N),N为value的⻓度.由于⼀般给的value⽐较短,通常视为O(1).

返回值:替换后的string的⻓度

image-20231023113031066

注意:setrange针对不存在的key也是可以操作的,但是会把offset之前的内容都填充为0x00

image-20231025212337169


STRLEN

获取key对应的string的⻓度。当key存放的类似不是string时,报错

语法:STRLEN key 

时间复杂度:O(1) 返回值:string的⻓度,单位是字节,当key不存在时,返回0

image-20231025212602814

utf-8编码当中,一个汉字占用3字节


命令总结

image-20231021102710257

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【Redis】String字符串类型-内部编码使用场景

文章目录 内部编码使用场景缓存功能计数功能共享会话手机验证码 内部编码 字符串类型的内部编码有3种: int:8个字节(64位)的⻓整型,存储整数embstr:压缩字符串,适用于表示较短的字符串raw&…

【C语言初学者周冲刺计划】2.4求一个3×3矩阵对角线元素之和

1解题思路&#xff1a; 首先学会怎么输入3*3矩阵的数值&#xff1b;然后细节处&#xff0c;比如最后求和应该加什么&#xff0c;怎么写问题&#xff1b; 2代码&#xff1a; #include<stdio.h> int main() {int str[3][3],i,j,sum0;for(i0;i<3;i){for(j0;j<3;j){…

农业中的机器学习

机器学习训练模型推荐&#xff1a; UnrealSynth虚幻合成数据生成器 - NSDT 机器学习是一个不断发展的领域&#xff0c;在农业中有许多潜在的应用。农民和农业科学家正在探索如何转向机器学习开发来提高作物产量、减少用水量和预测病虫害。未来&#xff0c;机器学习可以帮助农民…

Linux编辑器-vim使用

vi/vim的区别简单点来说&#xff0c;它们都是多模式编辑器&#xff0c;不同的是vim是vi的升级版本&#xff0c;它不仅兼容vi的所有指令&#xff0c;而且还有一些新的特性在里面。例如语法加亮&#xff0c;可视化操作不仅可以在终端运行&#xff0c;也可以运行于x window、 mac …

逆袭Flutter? Facebook 发布全新跨平台引擎 Hermes!

Facebook 于前日发布了新的 JavaScript 引擎&#xff1a;Hermes&#xff0c;专注于提高 React Native 应用的性能&#xff0c;并且在市面上那些内存较少、存储速度较慢且计算能力低下的移动设备上都有良好的表现。但是不是为了追赶Flutter&#xff1f;这块作者没有说明。 移动应…

java 数据结构 ArrayList源码底层 LinkedList 底层源码 迭代器底层

文章目录 数据结构总结ArrayList源码底层LinkedList底层源码 迭代器底层 数据结构 对于数据结构我这边只告诉你右边框框里的 栈的特点:后进先出,先进后出,入栈也成为压栈,出栈也成为弹栈 栈就像一个弹夹 队列先进先出后进后出 队列像排队 链表查询满 但是增删快(相对于数组而…

【行云流水线实践】基于“OneBuild”方法对镜像进行快速装箱 | 京东云技术团队

在云原生领域&#xff0c;无论使用哪种编排调度平台&#xff0c;Kubernetes&#xff0c;DockerSwarm&#xff0c;OpenShift等&#xff0c;业务都需要基于镜像进行交付&#xff0c;我们在内部实践“Source-to-image”和链式构建&#xff0c;总而总结出“OneBuild”模式。 其核心…

[JavaWeb]——过滤器filter与拦截器Interceptor的使用、执行过程、区别

&#x1f308;键盘敲烂&#xff0c;年薪30万&#x1f308; 目录 一、过滤器filter 概念介绍&#xff1a; 过滤器的使用&#xff1a; 过滤器的执行流程&#xff1a; 应用场景(登录校验)&#xff1a; 二、拦截器Interceptor 概念介绍&#xff1a; 拦截器的使用&#xff1…

ios原生分享

什么是 ios 系统的原生分享呢&#xff0c;如下图所示 具体使用系统UIActivityViewController&#xff0c;完整代码如下&#xff1a; -(void)shareAny:(NSString *)text url:(NSString *)_url imagePath:(NSString *)_imagePath {NSLog("shareAny, text:%, url:%, imagePa…

FRI及相关SNARKs的Fiat-Shamir安全

1. 引言 本文主要参考&#xff1a; Alexander R. Block 2023年论文 Fiat-Shamir Security of FRI and Related SNARKsAlbert Garreta 2023年9月在ZK Summit 10上分享 ZK10: Fiat-Shamir security of FRI and related SNARKs - Albert Garreta (Nethermind) 评估参数用的Sage…

甲方自建ERP这事靠不靠谱?来听听读过中欧商学院的老板怎么说

李总自建ERP开发团队的失败案例&#xff0c;投入三年&#xff0c;花了五六百万&#xff0c;做出来的东西&#xff0c;远不如免费开源的Odoo软件。Odoo有强大的技术平台&#xff0c;有无穷的功能插件。李总现身说法&#xff1a;“早知道有Odoo&#xff0c;何必瞎折腾&#xff0c…

SAP IDOC 开发入门

1, 基本概念 IDOC技术在早起版本的R/3系统就已经集成了&#xff0c;不过国内真正用起来还是05年以后了&#xff0c;其实IDOC是很强大的&#xff0c;在主数据和一些业务数据同步方面&#xff0c;几乎不需要做任何开发就可以配置完成&#xff0c;例如BD11&#xff0c;BD13这些事…

3 Spring底层概念介绍

BeanDefinition BeanDefinition表示Bean定义&#xff0c;BeanDefinition中存在很多属性用来描述一个Bean的特点。比如&#xff1a; class&#xff0c;表示Bean类型 scope&#xff0c;表示Bean作用域&#xff0c;单例或原型等 lazyInit&#xff1a;表示Bean是否是懒加载 initM…

2.Docker基本架构简介与安装实战

1.认识Docker的基本架构 下面这张图是docker官网上的&#xff0c;介绍了整个Docker的基础架构&#xff0c;我们根据这张图来学习一下docker的涉及到的一些相关概念。 1.1 Docker的架构组成 Docker架构是由Client(客户端)、Docker Host(服务端)、Registry(远程仓库)组成。 …

C语言实现 1.在一个二维数组中形成 n 阶矩阵,2.去掉靠边元素,生成新的 n-2 阶矩阵;3.求矩阵主对角线下元素之和:4.以方阵形式输出数组。

矩阵形式&#xff1a; 1 1 1 1 1 2 1 1 1 1 3 2 1 1 1 4 3 2 1 1 5 4 3 2 1 完整代码&#xff1a; /*编写以下函数 1&#xff0e;在一个二维数组中形成如以下形式的 n 阶矩阵&#xff1a; 1 1 1 1 1 2 1 1 1 1 3 2 1 1 1 4 3 2 1 1 5 4 3 2 1 2&#xff0e;去掉…

【Vue3+Vite+bwip-js库】 生成DataMatrix码

前提条件 已存在的vue3vite架构前端项目对二维码分类有一定的了解 生成的码的样式如下&#xff08;DataMatrix&#xff09; 该二维码容量如下 详情见&#xff1a;DataMatrix介绍 Vue3Vite 导入 bwip-js生成DataMatrix 1. 安装 npm install bwip-js --save2. 引入使用 <…

基于STC12C5A60S2系列1T 8051单片机A/D转换器应用

基于STC12C5A60S2系列1T 8051单片机A/D转换器应用 STC12C5A60S2系列1T 8051单片机管脚图STC12C5A60S2系列1T 8051单片机I/O口各种不同工作模式及配置STC12C5A60S2系列1T 8051单片机I/O口各种不同工作模式介绍STC12C5A60S2系列1T 8051单片机A/D转换器介绍STC12C5A60S2系列1T 805…

xlua源码分析(二)lua Call C#的无wrap实现

xlua源码分析&#xff08;二&#xff09;lua Call C#的无wrap实现 上一节我们主要分析了xlua中C# Call lua的实现思路&#xff0c;本节我们将根据Examples 03_UIEvent&#xff0c;分析lua Call C#的底层实现。例子场景里有一个简单的UI面板&#xff0c;面板中包含一个input fie…

3.线性神经网络-3GPT版

#pic_center R 1 R_1 R1​ R 2 R^2 R2 目录 知识框架No.1 线性回归基础优化算法一、线性回归1、买房案例2、买房模型简化3、线性模型4、神经网络5、损失函数6、训练数据7、参数学习8、显示解9、总结 二、 基础优化算法1、梯度下降2、学习率3、小批量随机梯度下降4、批量大小5、…

Qt 中model/View 架构 详解,以及案例实现相薄功能

model/View 架构 导读 ​ 我们的系统需要显示大量数据,比如从数据库中读取数据,以自己的方式显示在自己的应用程序的界面中。早期的 Qt 要实现这个功能,需要定义一个组件,在这个组件中保存一个数据对象,比如一个列表。我们对这个列表进行查找、插入等的操作,或者把修改…