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

news2024/11/27 0:49:49

文章目录

  • 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

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

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

相关文章

鉴源实验室 | 自动驾驶传感器攻击研究

作者 | 付海涛 上海控安可信软件创新研究院汽车网络安全组 来源 | 鉴源实验室 社群 | 添加微信号“TICPShanghai”加入“上海控安51fusa安全社区” 01 自动驾驶汽车的脆弱性 自2015年以来,汽车的信息安全问题受到国内外的广泛关注。而随着汽车的智能化与网联化的…

C语言scanf()函数读取包含空格的字符串

scanf()函数读取输入时,遇到空格或者回车结束读取; 所以输入的字符串中有空格,到空格就中断了; 根据资料,使用 "%[^\n]" 这样的格式化符遇到空格继续读取,直到敲了回车; 看一下&am…

微信小程序UI自动化测试实践:Minium+PageObject

小程序架构上分为渲染层和逻辑层,尽管各平台的运行环境十分相似,但是还是有些许的区别(如下图),比如说JavaScript 语法和 API 支持不一致,WXSS 渲染表现也有不同,所以不论是手工测试&#xff0c…

Javaweb之HTML,CSS的详细解析

2. HTML & CSS 1). 什么是HTML ? HTML: HyperText Markup Language,超文本标记语言。 超文本:超越了文本的限制,比普通文本更强大。除了文字信息,还可以定义图片、音频、视频等内容。 标记语言:由标签构成的语言…

Netty在Firbase中的使用

1.1前言 实时更新是现代应用程序中用户体验的一个组成部分。随着用户期待这样的行为,越来越多的应用程序都正在实时地向用户推送数据的变化。通过传统的3层架构很难实现实时的数据同步,其需要开发者管理他们自己的运维、服务器以及伸缩。通过维护到客户…

会声会影2024对比2023变化以及功能对比

全新会声会影2024版本现已登场,小伙伴们相信已经急不可待地想知道2024版到底有哪些新功能。对比2023版本,会声会影2024版本有没有功能的增强?事不宜迟,现在就让我们一起来看看会声会影2024对比2023的变化,包括功能对比…

Spring Boot整合Swagger

🙈作者简介:练习时长两年半的Java up主 🙉个人主页:程序员老茶 🙊 ps:点赞👍是免费的,却可以让写博客的作者开心好久好久😎 📚系列专栏:Java全栈,…

Java 为什么不推荐在 while 循环中使用 sleep() 我悟了

文章目录 前言原因是否正确方案是否合理定时轮询场景事件机制等待和唤醒 个人简介 前言 最近逛 CSDN 看到一篇文章,文章大意是说为什么在循环中不推荐使用 sleep 操作,原因在于线程挂起和唤醒会有很大的性能消耗,并推荐使用 Timer 及 Schedu…

描述低轨星座的特点和通信挑战,以及它们在5G和B5G中的作用。

文章目录 2章4 章5章(没看)6章(没看) 2章 将卫星星座中每个物理链路中可实现的数据速率、传播延迟和多普勒频移与3GPP技术报告中的参数进行分析和比较[3]。 相关配置 面向连接的网络,预先简历链路 卫星和地面终端有…

能卷死同行的收银系统源码--服装店收银系统+进销存、PHP+mysql

涉及零售服装门店收银系统源码 超市务管理系统源码 便利店收银系统源码 进销存erp/scrm的供应链订货系统源码 saas门店连锁加盟收银系统源码 走过路过不要错过。 整理采用ThinkPHPmysql,二开门槛低, 模块化设计,前后端分离。 前端&…

使用JMeter进行接口压力测试

1.我首先创建一个线程组 2.创建好之后如图所示 3. 进行配置 4. 然后添加一个https请求 5.创建好之后设置请求方法和对应参数 6.设置表格监听器 7.创建好之后如图所示 8.保存jmx文件后点击运行进行测试,结果反馈如下图

Maxwell for 3dMax渲染器的安装方法

Maxwell渲染器的安装方法 Maxwell Render是一个基于控制光传输的数学方程的渲染引擎,这意味着所有元素,如发射器材料和相机,都是从物理精确的模型中导出的。Maxwell Render是无偏的,因此不使用任何技巧来计算场景中每个像素的照明…

信息论基础知识1

1.1 自信息定义:把某个消息出现的不确定性大小,用这个消息出现的概率的对数表示: I(X)-logp(x) 1.2 在任何一个信息流通的系统中,都有一个发出信息的发送端(信源),有一个接收信息的接收端…

我的计算机启蒙书:信息学竞赛入门书提高篇

你是否曾读过一本让你欲罢不能的计算机书籍?它可能为你打开了新的技术世界大门,或者是帮助你解决了棘手的编程难题。 我从百度上搜到其相关介绍: 信息学奥赛一本通,是一本系统性、综合性的信息学竞赛教材,由著名信息学…

[架构之路-254/创业之路-85]:目标系统 - 横向管理 - 源头:信息系统战略规划的常用方法论,为软件工程的实施指明方向!!!

目录 总论: 一、数据处理阶段的方法论 1.1 企业信息系统规划法BSP 1.1.1 概述 1.1.2 原则 1.2 关键成功因素法CSF 1.2.1 概述 1.2.2 常见的企业成功的关键因素 1.3 战略集合转化法SST:把战略目标转化成信息的集合 二、管理信息系统阶段的方法论…

Ubuntu20.04下安装Redis环境

apt安装Redis环境 更新apt-get安装镜像源 安装Redis sudo apt-get install -y redis-server设置密码 # 编辑Redis的配置文件redis.conf,如果不知道配置文件的位置可以执行whereis redis.conf查看 sudo vim /etc/redis/redis.conf取消文件中的requirepass注释&am…

draw.io与项目管理——如何利用流程图工具提高项目管理效率

draw.io 是一款强大的图形绘制工具,用于创建各种类型的图表、流程图、组织结构图、网络图和平面设计等。它提供了丰富的绘图工具和预定义的图形库,使用户能够轻松创建专业水平的图形作品。 draw.io具有直观的界面和简单易用的功能,适合各种用…

Windows 安全

Windows sec study N F T S 文件系统 \color{#FC5531}{NFTS 文件系统} NFTS文件系统 常用命令 \color{#FC5531}{常用命令} 常用命令 磁盘管理 \color{#FC5531}{磁盘 管理} 磁盘管理 文件备份 \color{#FC5531}{文件备份} 文件备份 安全策略管理 \color{#FC5531}{安全策略管理} 安…

旧手机搭建linuxcentos

centos服务器搭建termux搭建centos旧手机搭建linux服务器ubuntu旧手机搭建网站旧手机搭建linux debian ubuntu centos 旧手机搭建宝塔搭建 32位Linux搭建宝塔 Linuxdeploy搭建宝塔 旧手机搭建服务器有需要的来 包答疑包售后 Linuxdeploy需要root mobile搭建服务器 脚本/工具