速通Redis基础(一):掌握Redis的字符串类型和命令

目录

字符串(String)

常见命令

SET

GET

MSET&MGET

SETNX 

INCR

INCRBY 

DECR

 DECRBY

INCRBYFLOAT

APPEND

GETRANGE

SETRANGE

STRLEN 

Redis字符串类型命令总结


Redis(Remote Dictionary Server)是一个高性能的开源键值存储系统,广泛用于构建快速、可扩展的应用程序。Redis提供了多种数据类型和丰富的命令集,使其成为一个强大的数据存储和缓存解决方案。在本篇博客中,我们将介绍Redis的基本数据类型和常用命令,希望大家多多支持呀


Redis支持多种数据类型,每种类型都具有不同的用途和特性。以下是Redis的主要数据类型:

字符串(String)

字符串是Redis中最简单的数据类型,它可以存储文本或二进制数据。Redis的字符串是可变的,可以对其进行追加、截取和操作。

常见命令

SET

语法:

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

时间复杂度:O(1) 

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

 如下代码示例:

速通Redis基础(一):掌握Redis的字符串类型和命令_第1张图片

SET 命令还可以支持多种选项来影响它的行为:

EX seconds⸺使用秒作为单位设置 key 的过期时间。

设置name zhangsan的过期时间为10秒

十秒钟之后获取:


PX milliseconds⸺使用毫秒作为单位设置 key 的过期时间。

设置name zhangsan的过期时间为1000毫秒(再获取很快就返回nil了~)


NX ⸺只在 key 不存在时才进行设置,即如果 key 之前已经存在,设置不执行。

就像下面所示,我没有name这个key才能插入,如果存在就不执行并且返回nil

速通Redis基础(一):掌握Redis的字符串类型和命令_第2张图片


XX ⸺只在 key 存在时才进行设置,即如果 key 之前不存在,设置不执行。

如下图所示,存在才能设置,我们看到zhangsan被修改为lisi了~

速通Redis基础(一):掌握Redis的字符串类型和命令_第3张图片


返回值:

1. 如果设置成功,返回 OK。

2. 如果由于 SET 指定了 NX 或者 XX 但条件不满足,SET 不会执行,并返回 (nil)。 

GET

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

语法:

GET key

时间复杂度:O(1)

返回值:

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

MSET&MGET

MEST

⼀次性设置多个 key 的值。

语法:

MSET key value [key value ...]

时间复杂度:O(N) N 是 key 数量

返回值:永远是 OK

MGET

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

语法:

MGET key [key ...]

时间复杂度:O(N) N 是 key 数量

返回值:对应 value 的列表

示例:

速通Redis基础(一):掌握Redis的字符串类型和命令_第4张图片

使用 mget / mset 由于可以有效地减少了网络时间,所以性能相较更高。假设网络耗 时 1 毫秒,命令执行时间耗时 0.1 毫秒,则执行时间如图所示。

所以使用批量操作,可以有效提高业务处理效率,但是要注意,每次批量操作所发送的键的数量也不是无节制的,否则可能造成单⼀命令执行时间过长,导致 Redis 阻塞。  

SETNX 

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

语法:

SETNX key value

时间复杂度:O(1) 

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 类型的减完后的数值。

示例:

 DECRBY

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

语法:

 DECRBY key decrement

时间复杂度:O(1)

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

示例:

INCRBYFLOAT

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

语法:

INCRBYFLOAT key increment

时间复杂度:O(1)

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

示例:

APPEND

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

语法:

APPEND KEY VALUE

时间复杂度:O(1)

返回值:追加完成之后 string 的长度

示例:

速通Redis基础(一):掌握Redis的字符串类型和命令_第5张图片

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

示例:

速通Redis基础(一):掌握Redis的字符串类型和命令_第6张图片

STRLEN 

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

语法:

STRLEN key

时间复杂度:O(1)

返回值:string 的长度。或者当 key 不存在时,返回 0

示例:

Redis字符串类型命令总结

命令 执行效果 时间复杂度
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,redis,数据库,缓存,后端,java)