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 的长度

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

操作演示:

在这里插入图片描述

相关内容

热门资讯

10分钟辅助挂!搜圈麻将假不假... 10分钟辅助挂!搜圈麻将假不假“详细透视辅助助手教程”原来真的有挂,您好,搜圈麻将假不假这款游戏可以...
记者发布!福建十三水 辅助器(... 记者发布!福建十三水 辅助器(透视)透视辅助神器(2023已更新)(哔哩哔哩);1、福建十三水 辅助...
6分钟实锤!博雅红河棋盘外 挂... 您好,博雅红河棋盘外 挂这款游戏可以开挂的,确实是有挂的,需要了解加微【757446909】很多玩家...
八分钟辅助挂!微乐陕西麻将小程... 八分钟辅助挂!微乐陕西麻将小程序有猫腻吗“详细透视辅助脚本教程”原来真的有挂1、下载好微乐陕西麻将小...
必备科技!多乐够级捕鱼辅助软件... 必备科技!多乐够级捕鱼辅助软件(透视辅助)透明挂透视辅助挂(2023已更新)(哔哩哔哩)1、多乐够级...
让我来分享经验!胖猪竞技有外挂... 让我来分享经验!胖猪竞技有外挂没(辅助)确实存在有挂(2026已更新)(哔哩哔哩)胖猪竞技有外挂没辅...
七分钟攻略!七彩云南游戏有外 ... 七分钟攻略!七彩云南游戏有外 挂吗,wePoke原来真的是有挂,wpk教程(有挂细节)1)七彩云南游...
交流学习经验!老友广东麻将来牌... 交流学习经验!老友广东麻将来牌规律(透视)外挂透视辅助插件(2024已更新)(哔哩哔哩)1、在老友广...
13钟辅助挂!闲来贵州麻将可以... 13钟辅助挂!闲来贵州麻将可以挂吗“详细透视辅助app教程”原来真的有挂是一款可以让一直输的玩家,快...
9分钟攻略!乐乐上海麻将有没有... 9分钟攻略!乐乐上海麻将有没有挂,impoker本来有挂,黑科技教程(有挂教程)乐乐上海麻将有没有挂...