Redis 中String类型操作命令(命令演示,时间复杂度,返回值,注意事项)
创始人
2025-01-10 09:37:42
0次

String 类型

文章目录

  • String 类型
  • set 命令
  • get 命令
  • mset 命令
  • mget 命令
  • get 和 mget 的区别
  • incr 命令
  • incrby 命令
  • decr 命令
  • decrby 命令
  • incrbyfloat 命令
  • append 命令
  • getrange 命令
  • setrange 命令

字符串类型是 Redis 中最基础的数据类型,在讲解命令之前,我们先讨论以下 Redis 中的 String 类型,关于 Redis 中的 String 类型,要注意三点:

① Redis 中的 “键” 都是 String 类型,而 Redis 中的 value 是多种类型的,而在这多种中类型中,它们存储的元素类型也都是 String 类型,比如,list 类型,set 类型,存储的元素值是 String 类型。

② 如果 value 是 String 类型,它可以是一般的字符串,也可以是 JSON、XML 格式的字符串,也可以是 “数字”,二进制流数据,例如图片,但是,这里的字符串最好不要太大,否则的话读取时间会很长。

③ Redis 中 String 类型数据的存储都是按照**“二进制数据”**存储的,并且,Redis 是不处理字符集编码问题的,客户端传入的命令中,使用的是什么字符集编码,存储时就是什么字符集编码。

下面,就来简单看一下几个常用的命令:

set 命令

设置 key 和 value,在不指定选型的默认情况下,如果指定的 key 存在的话,则更新 value 值,如果 key 不存在的话,则存储 key 和 value

语法:set key [expiration EX seconds|PX milliseconds] [NX|XX]

选项解释:

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

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

NX:如果 key 不存在,则存储 key 和 value,如果 key 存在,则不能存储

XX:如果 key 存在则存储,如果 key 不存在,则不存储

时间复杂度:O(1)

返回值:ok

操作演示:

在这里插入图片描述

注意:上述我存储的 key 和 value 都是字符串类型,而在 Redis 中,字符串类型加不加引号都是可以的,以及加双引号或单引号也都不会出错。

get 命令

根据 key 获取 value,如果 value 的数据类型不是 String ,则会报错

语法:get key

时间复杂度:O(1)

返回值:key 对应的value,如果key不存在,返回 nil

操作演示:

在这里插入图片描述

mset 命令

一次设置多个 key

语法:mset key [key……]

时间复杂度:O(k),这里的 k 表示 key 的个数

返回值:ok

操作演示:

在这里插入图片描述

mget 命令

一次获取多个 key 的 value

语法:mget key [key……]

时间复杂度:O(k)

返回值:key 对应的 value

操作演示:

在这里插入图片描述

get 和 mget 的区别

要记住,Redis 的架构是“客户端-服务器”架构,每一次传入命令都是向服务器发送一次请求,是通过网络传输的,而网络传输的速度也是比较慢的,并且也可能会因为一些因素导致传输失败,毕竟网上有一句话是这样讲的:再牛的网络,也敌不过挖掘机的一铲子,所以,如果要设置多个key 或 获取多个 key 使用 get 和 mget 所发送请求的个数就相差很大,如下图:

在这里插入图片描述

在这里插入图片描述

所以,mget / mset 这种批量操作,可以有效的节约网络时间,但需要注意的时,批量操作时指定的 key 不要太多,否则的话,容易导致 Redis 阻塞。

incr 命令

将 key 对应的 String 表示的数字加1,如果 key 不存在,则设置key,并且认为 key 对应的 vlaue 的值为 0,如果,key 所对应的 value 的值不是一个数字,或者数字的范围超过了 64位有符号的整型,则报错

语法:incr key

时间复杂度:O(1)

返回值:成功加完后的数值

操作演示:

在这里插入图片描述

incrby 命令

将 key 对应的 String 表示的数字加上指定的 n,如果 key 不存在,则设置key,并且认为 key 对应的 vlaue 的值为 0,如果,key 所对应的 value 的值不是一个数字,或者数字的范围超过了 64位有符号的整型,则报错

语法:incrby key n

时间复杂度:O(1)

返回值:成功添加后的值

操作演示:

在这里插入图片描述

decr 命令

将 key 对应的 String 表示的数字减 1,如果 key 不存在,则设置key,并且认为 key 对应的 vlaue 的值为 0,如果,key 所对应的 value 的值不是一个数字,或者数字的范围超过了 64位有符号的整型,则报错

语法:decr key

时间复杂度:O(1)

返回值:成功减去后的值

操作演示:

在这里插入图片描述

decrby 命令

decrby 命令同样也是减操作,只不过是减去我们指定的数值,和上面的 incrby 命令的操作方式一样,这里就不再演示。

incrbyfloat 命令

incrbyfloat 命令是针对 value +/- 小数,操作方式同样和上面的加减命令操作方式一样,这里也不再演示。

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

append 命令

如果 key 已经存在,并且 value 是字符串,那么 append 命令会将指定的value值拼接到字符串后面,如果不存在,用法和set一样,就会添加一个新的元素

语法:append key value

时间复杂度:O(1)

返回值:字符串的长度

操作演示:

在这里插入图片描述

getrange 命令

获取 key 对应的字符中的子串

语法:getrange key start end

start:左区间(闭)

end:右区间(闭)

并且可以使用负数表示倒数,-1 表示最后一个位置的元素,-2 表示倒数第二个位置的元素

时间复杂度:O(k),k 是[start,end]区间的长度

返回值:返回指定位置的字串

操作演示:

在这里插入图片描述

setrange 命令

覆盖字符串的一部分

语法:setrange key offset value

offset:指定需要覆盖的开始位置

value:新的字符串

时间复杂度:O(k),k 表示 value 的长度

返回值:替换后的字符串的长度

操作演示:

在这里插入图片描述

相关内容

热门资讯

一分钟教你辅助!微乐小程序免费... 您好,微乐小程序免费工具这款游戏可以开挂的,确实是有挂的,需要了解加去威信【136704302】很多...
玩家必看秘籍开挂!艾牛娱乐辅助... 玩家必看秘籍开挂!艾牛娱乐辅助透视挂,北京麻将真的是有外挂,总是有挂分享1、让任何用户在无需艾牛娱乐...
科技分享透视挂!微信小程序微乐... 科技分享透视挂!微信小程序微乐辅助免费,微乐江苏小程序游戏破解器下载-果然是真的有辅助器微信小程序微...
玩家必备科普透视挂!新九游大厅... 玩家必备科普透视挂!新九游大厅辅助透视挂,天天温岭麻将是真的有外挂,都是揭秘有挂1、用户打开应用后不...
必备科技开挂!微信小程序微乐辅... 必备科技开挂!微信小程序微乐辅助器教程,微乐自建房辅助工具安全吗-确实存在有辅助教程1)微信小程序微...
指导大家辅助!荷塘辅助透视挂,... 指导大家辅助!荷塘辅助透视挂,微乐河南麻将真的有外挂,确实有挂分析指导大家辅助!荷塘辅助透视挂,微乐...
1.9分钟了解辅助!微乐家乡麻... 1.9分钟了解辅助!微乐家乡麻将辅助,微乐小程序免费黑科技-其实真的是有辅助插件1、玩家可以在微乐小...
最终开挂!微乐浙江麻将辅助透视... 最终开挂!微乐浙江麻将辅助透视挂,闲来广东麻将真的有外挂,都是真实有挂1、下载好微乐浙江麻将脚本下载...
实测发现辅助!微乐小程序黑科技... 实测发现辅助!微乐小程序黑科技免费工具,微乐家乡官方免费下载安装-本来是真的有辅助脚本1、上手简单,...
日前开挂!挖坑青海麻将辅助透视... 日前开挂!挖坑青海麻将辅助透视挂,元来黄冈麻将是真的有外挂,一贯有挂功能1、每一步都需要思考,不同水...