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

本文涉及的产品
云数据库 Redis 版,社区版 2GB
推荐场景:
搭建游戏排行榜
云原生内存数据库 Tair,内存型 2GB
云数据库 Redis 版,经济版 1GB 1个月
简介: 【Redis】 String 字符串类型常见命令

🍃前言

字符串类型是 Redis 最基础的数据类型,下面将介绍使用该类型时常用的命令,关于字符串需要特别注意:

  1. ⾸先 Redis 中所有的键的类型都是字符串类型,⽽且其他⼏种数据结构也都是在字符串类似基础上构建的,例如列表和集合的元素类型是字符串类型,所以字符串类型能为其他 4 种数据结构的学习奠定基础。
  2. 其次,字符串类型的值实际可以是字符串,包含⼀般格式的字符串或者类似JSON、XML格式的字符串;数字,可以是整型或者浮点型;甚⾄是⼆进制流数据,例如图⽚、⾳频、视频等。不过⼀个字符串的最⼤值不能超过512MB。

🎋常见命令

🚩set

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

语法:

SET key value [expiration EX seconds|PX milliseconds] [NX|XX]

SET命令⽀持多种选项来影响它的⾏为:

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

时间复杂度:

  • O(1)

返回值:

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

🚩get

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

语法:

get key

时间复杂度:

  • O(1)

返回值:

  • key对应的value,或者 nil 当 key 不存在

🚩mget

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

语法:

mget key [key ...]

时间复杂度:

  • O(N) , N是key数量,数量较少时可理解为O(1)

返回值:

  • 对应 value 的列表

🚩mset

次性设置多个 key 的值。

语法:

mset key value [key value ...]

时间复杂度:

  • O(N) ,N是key数量,数量较少时可理解为O(1)

返回值:

  • 永远是 OK

🚩setnx

设置 key-value 但只允许在 key 之前不存在的情况下。

语法:

setnx key value

时间复杂度:

  • O(1)

返回值:

  • 1 表⽰设置成功。0 表⽰没有设置

🌳计数命令

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

🚩incr

将 key 对应的 string 表⽰的数字加⼀。

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

语法:

incr key

时间复杂度:

  • O(1)

返回值

  • integer 类型的加完后的数值。

🚩incrby

将 key 对应的 string 表⽰的数字加上对应的值。

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

语法:

incrby key decrement

时间复杂度:

  • O(1)

返回值:

  • integer类型的加完后的数值

🚩decr

将 key 对应的 string 表⽰的数字减⼀。

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

语法:

decr key

时间复杂度:

  • O(1)

返回值:

  • integer 类型的减完后的数值

🚩decby

将 key 对应的 string 表⽰的数字减去对应的值。

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

语法:

decby key decrement

时间复杂度:

  • O(1)

返回值:

  • integer 类型的减完后的数值。

🚩incrbyfloat

将 key 对应的 string 表⽰的浮点数加上对应的值。如果对应的值是负数,则视为减去对应的值。

  • 如果key 不存在,则视为 key 对应的 value 是0。
  • 如果key 对应的不是 string,或者不是⼀个浮点数,则报错。

允许采⽤科学计数法表⽰浮点数。

语法:

incrbyfloat key decrement

时间复杂度:

  • O(1)

返回值:

  • 加/减完后的数值

🍀其他命令

🚩append

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

语法:

append key value

时间复杂度:

  • O(1).追加的字符串⼀般⻓度较短,可以视为O(1).

返回值:

  • 追加完成之后 string 的⻓度。

🚩getrange

返回 key 对应的 string 的⼦串,由 start 和 end 确定(左闭右闭)。

  • 可以使⽤负数表⽰倒数。-1代表倒数第⼀个字符,-2代表倒数第⼆个,其他的与此类似。
  • 超过范围的偏移量会根据 string 的⻓度调整成正确的值

语法:

getrange key start end

时间复杂度:

  • O(N). N 为[start, end] 区间的⻓度. 由于 string 通常⽐较短, 可以视为是 O(1)

返回值:

  • string 类型的⼦串

🚩setrange

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

语法:

setrange key offset value

时间复杂度:

  • O(N), N 为 value 的⻓度. 由于⼀般给的 value ⽐较短, 通常视为 O(1).

返回值:

  • 替换后的 string 的⻓度

🚩strlen

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

语法:

strlen key

时间复杂度:

  • O(1)

返回值:

  • string 的⻓度。或者当 key 不存在时,返回0。

🌲命令小结

命令 执行效果 时间复杂度
set key value [key value…] 设置key的值是value O(k),k是键个数
get key 获取 key 的值 O(1)
del key [key …] 删除指定的 key O(k), k 是键个数
mset key value [key value …] 批量设置指定的 key 和 value O(k), k 是键个数
mget key [key …] 批量获取 key 的值 O(k), k 是键个数
incr key 指定的 key 的值 +1 O(1)
decr key 指定的 key 的值 -1 O(1)
incrby key n 指定的 key 的值 +n O(1)
decrby key n 指定的 key 的值 -n O(1)
incrbyfloat key n 指定的 key 的值 +n O(1)
append key value 指定的 key 的值追加 value O(1)
strlen key 获取指定 key 的值的⻓度 O(1)
setrange key offset value 覆盖指定 key 的从 offset 开始的部分值 O(n),n 是字符串⻓度,通常视为O(1)
getrange key start end 获取指定 key 的从 start 到 end 的部分值 O(n),n是字符串⻓度,通常视为O(1)

⭕总结

关于《【Redis】 String 字符串类型常见命令》就讲解到这儿,感谢大家的支持,欢迎各位留言交流以及批评指正,如果文章对您有帮助或者觉得作者写的还不错可以点一下关注,点赞,收藏支持一下

相关实践学习
基于Redis实现在线游戏积分排行榜
本场景将介绍如何基于Redis数据库实现在线游戏中的游戏玩家积分排行榜功能。
云数据库 Redis 版使用教程
云数据库Redis版是兼容Redis协议标准的、提供持久化的内存数据库服务,基于高可靠双机热备架构及可无缝扩展的集群架构,满足高读写性能场景及容量需弹性变配的业务需求。 产品详情:https://www.aliyun.com/product/kvstore     ------------------------------------------------------------------------- 阿里云数据库体验:数据库上云实战 开发者云会免费提供一台带自建MySQL的源数据库 ECS 实例和一台目标数据库 RDS实例。跟着指引,您可以一步步实现将ECS自建数据库迁移到目标数据库RDS。 点击下方链接,领取免费ECS&RDS资源,30分钟完成数据库上云实战!https://developer.aliyun.com/adc/scenario/51eefbd1894e42f6bb9acacadd3f9121?spm=a2c6h.13788135.J_3257954370.9.4ba85f24utseFl
相关文章
|
9天前
|
存储 Java
Redis08命令-Hash类型,也叫散列,其中value是一个无序字典,类似于java的HashMap结构,Hash结构可以将对象中的每个字段独立存储,可以针对每字段做CRUD
Redis08命令-Hash类型,也叫散列,其中value是一个无序字典,类似于java的HashMap结构,Hash结构可以将对象中的每个字段独立存储,可以针对每字段做CRUD
|
9天前
|
存储 NoSQL Redis
Redis07命令-String类型字符串,不管是哪种格式,底层都是字节数组形式存储的,最大空间不超过512m,SET添加,MSET批量添加,INCRBY age 2可以,MSET,INCRSETEX
Redis07命令-String类型字符串,不管是哪种格式,底层都是字节数组形式存储的,最大空间不超过512m,SET添加,MSET批量添加,INCRBY age 2可以,MSET,INCRSETEX
Redis06-Redis常用的命令,模糊的搜索查询往往会对服务器产生很大的压力,MSET k1 v1 k2 v2 k3 v3 添加,DEL是删除的意思,EXISTS age 可以用来查询是否有存在1
Redis06-Redis常用的命令,模糊的搜索查询往往会对服务器产生很大的压力,MSET k1 v1 k2 v2 k3 v3 添加,DEL是删除的意思,EXISTS age 可以用来查询是否有存在1
|
20天前
|
Java UED
Java中String强转int:一种常见的错误和解决方法
在Java中将非数字字符串转换为整数会导致`NumberFormatException`。要解决这个问题,可以使用`try-catch`捕获异常,正则表达式验证数字格式,或利用异常信息提供错误提示。例如,`Integer.parseInt()`会因遇到非数字字符如`"123abc"`而抛出异常,但通过异常处理或正则`\\d+`可确保安全转换。记得在编程时避免直接强转,以防止程序异常中断。
|
11天前
|
安全 Java
Java基础之StringBuffer
【7月更文挑战第1天】 Java中的`StringBuffer`是线程安全的字符串操作类,适合多线程环境,而`StringBuilder`非线程安全,速度更快,适用于单线程。两者提供`append()`、`insert()`、`delete()`等方法修改字符串,避免了频繁创建新对象的性能问题。在不需要线程安全时,推荐使用`StringBuilder`以提高效率。
12 1
|
12天前
|
安全 Java 索引
带你快速掌握Java中的String类和StringBuffer类(详解常用方法 | 区别 )
带你快速掌握Java中的String类和StringBuffer类(详解常用方法 | 区别 )
|
19天前
|
Java 数据处理 Apache
探讨Java中判断String类型为空和null的方法
探讨Java中判断String类型为空和null的方法
14 1
|
22天前
|
Java API 索引
java中String类常用API
java中String类常用API
|
16天前
|
存储 Java API
Java基础之String类
Java的String类是引用类型,用于创建和操作字符串。字符串对象在`java.lang`包中,不可变。创建方式包括字面量和`new`关键字。字符串池存储字符串常量,避免重复。比较字符串用`equals()`(区分大小写)和`equalsIgnoreCase()`(不区分大小写)。`length()`返回长度,`concat()`或`+`拼接,`substring()`截取,`indexOf()`和`lastIndexOf()`查找,`replace()`替换,`split()`分割。这些是常用的字符串API。
10 0
|
16天前
|
Java
Java基础之String类
Java基础之String类
13 0