文章目录
redis-字符串命令
在 Redis 中,字符串是最基本的数据类型之一,也是使用最广泛的数据类型之一。字符串可以存储任何类型的数据,包括数字、文本、二进制数据等等。在 Redis 中,提供了丰富的字符串操作命令,包括用于获取、设置、修改、删除字符串的命令等等。
在字符串中,我们可以使用 set
命令设置键值对,并使用 get
命令获取键对应的值。我们也可以使用 getset
命令设置键对应的值并返回旧值。此外,我们还可以使用 append
命令将值追加到指定键的值的末尾,使用 incr
和 decr
命令分别将键存储的数字值加1和减1,使用 incrby
和 decrby
命令将键存储的数字值加上和减去给定的数字,使用 incrbyfloat
命令将键存储的浮点数值加上给定的浮点数。
在 Redis 中,我们也可以使用一些高级的字符串操作命令,例如 getrange
命令用于获取指定键值的子字符串,setrange
命令用于从指定偏移量开始替换键存储的值,strlen
命令用于获取键值的长度,substr
命令用于获取键值的子字符串,等等。此外,我们还可以使用 mget
命令同时获取多个键的值,使用 mset
命令同时设置多个键值对,以及使用 msetnx
命令同时设置多个键值对,但只有在所有键都不存在时才会进行设置。
除此之外,Redis 还提供了一些特殊的字符串操作命令,例如 setex
命令用于设置键的值和过期时间,psetex
命令用于设置键的值和过期时间(毫秒),getdel
命令用于获取并删除指定键的值,等等。
在 Redis 中,字符串操作命令非常灵活,可以满足各种不同的应用场景和需求,例如缓存、计数器、分布式锁等等。同时,由于 Redis 中的字符串操作命令非常快速和高效,因此也成为了 Redis 最受欢迎和使用的数据类型之一。
1,String类型常见的命令
命令 | 作用 |
---|---|
SET | 添加或者修改已经存在的一个string类型的键值对 |
GET | 根据key获取string类型的value |
MSET | 批量添加多个string类型的键值对 |
MGET | 根据多个key获取多个string类型的value |
INCR | 让一个整型的key自增 |
INCRBY | 让一个整型的key自增并且指定步长 |
INCRBYFLOAT | 让一个浮点类型的数字自增并指定步长 |
SETNX | 添加一个string类型的键值对,前提是这个key不存在,否则不执行 |
SETEX | 添加一个string类型的键值对,并且指定有效期 |
2,String类型命令
命令 | 描述 | 返回类型 | 版本支持 |
---|---|---|---|
append | 将值追加到指定键的值的末尾 | 整数,追加后值的长度 | 2.0.0 |
decr | 将键存储的数字值减1 | 整数,减1后的值 | 1.0.0 |
decrby | 将键存储的数字值减去给定的数字 | 整数,减去给定数字后的值 | 1.0.0 |
get | 获取指定键的值 | 字符串,键的值 | 1.0.0 |
getdel | 获取并删除指定键的值 | 字符串,键的值 | 6.2.0 |
getex | 获取指定键的值并设置过期时间 | 字符串,键的值 | 6.2.0 |
getrange | 获取指定键值的子字符串 | 字符串,子字符串 | 2.4.0 |
getset | 设置指定键的值并返回旧值 | 字符串,旧值 | 1.0.0 |
incr | 将键存储的数字值加1 | 整数,加1后的值 | 1.0.0 |
incrby | 将键存储的数字值加上给定的数字 | 整数,加上给定数字后的值 | 1.0.0 |
incrbyfloat | 将键存储的浮点数值加上给定的浮点数 | 浮点数,加上给定浮点数后的值 | 2.6.0 |
lcs | 命令用于计算两个字符串的最长公共子序列 | 它的返回值是一个数组 | 7.0.0 |
mget | 获取多个键的值 | 数组,键的值 | 1.0.0 |
mset | 同时设置多个键值对 | 状态回复,OK | 1.0.1 |
msetnx | 同时设置多个键值对,只有在所有键都不存在时才会进行设置 | 状态回复,OK | 1.0.1 |
psetex | 设置键的值和过期时间(毫秒) | 状态回复,OK | 2.6.0 |
set | 设置键的值 | 状态回复,OK | 1.0.0 |
setex | 设置指定键的值和过期时间 | 状态回复,OK | 2.0.0 |
setnx | 只有在该键不存在时,才设置该键的值 | 整数,1表示设置成功,0表示键已存在 | 1.0.0 |
setrange | 将从指定偏移量开始的值替换为键存储的值 | 整数,替换后的字符串长度 | 2.2.0 |
strlen | 返回指定键值的长度 | 整数,字符串长度 | 2.2.0 |
substr | 返回指定键值的子字符串 | 字符串,子字符串 | 1.0.0 |
append
append
命令的使用方法如下:
假设当前redis数据库中没有名为mykey
的键值对,我们可以使用append
命令向其添加字符串值Hello
,并返回追加后值的长度:
append mykey Hello
如果我们再次使用append
命令将字符串值 World
追加到mykey
的末尾,则返回的值为11
,即追加后字符串的总长度:
append mykey " World"
此时,mykey
的值为Hello World
。
decr
decr
指令用于将键存储的数字值减1,并返回减1后的值。例如,如果mykey
的值为5
,则执行以下命令将其减1:
decr mykey
此时,返回值为4
,且mykey
的值也变成了4
。注意,如果mykey
的值不是数字类型,则执行该指令会返回一个错误。
decrby
decrby
指令用于将键存储的数字值减去给定的数字,并返回减去给定数字后的值。例如,如果mykey
的值为10
,则执行以下命令将其减去3
:
decrby mykey 3
此时,返回值为7
,且mykey
的值也变成了7
。如果mykey
的值不是数字类型,则执行该指令会返回一个错误。
get
get
指令用于获取指定键的值。例如,如果mykey
的值为Hello World
,则执行以下命令获取其值:
get mykey
此时,返回的值为Hello World
。如果mykey
不存在,则返回一个空值(nil)。
getdel
getdel
指令用于获取并删除指定键的值。例如,如果mykey
的值为Hello World
,则执行以下命令获取其值并删除该键值对:
getdel mykey
此时,返回的值为Hello World
,且mykey
的键值对被删除。如果mykey
不存在,则返回一个空值(nil)。
getex
getex
指令用于获取指定键的值并设置过期时间。例如,如果我们想要在mykey
键上设置一个10秒的过期时间,并获取它的值,执行以下命令:
getex mykey ex 10
此时,返回的值为mykey
的值,且mykey
键的过期时间被设置为10秒。如果mykey
不存在,则返回一个空值(nil)。如果mykey
已经存在,并且已经设置了过期时间,则新的过期时间将覆盖旧的过期时间。
getrange
getrange
指令用于获取指定键值的子字符串。例如,如果mykey
的值为This is a string
,则执行以下命令获取从第2个字符开始,到第5个字符之间的子字符串:
getrange mykey 1 4
此时,返回的值为his
。注意,字符串中的第一个字符的索引为0,因此getrange mykey 1 4
实际上获取的是第2个字符到第5个字符之间的子字符串。
redis> SET mykey "This is a string"
"OK"
redis> GETRANGE mykey 0 3
"This"
redis> GETRANGE mykey -3 -1
"ing"
redis> GETRANGE mykey 0 -1
"This is a string"
redis> GETRANGE mykey 10 100
"string"
redis>
getset #重要
getset
指令是用于设置指定键的值并返回旧值的。在下面的示例中,假设mykey
的值为Hello
,执行以下命令将其值设置为World
并返回旧值:
getset mykey World
此时,返回的值为Hello
,并且mykey
的值被设置为World
。但是,如果mykey
不存在,则将其设置为World
并返回一个空值(nil)。
此外,getset
指令还可以用于在Redis中实现乐观锁。通过使用此指令,可以检查旧值是否与预期值匹配,如果匹配,则将键的值设置为新值并返回旧值。如果旧值不匹配,则不会更改键的值。此方法非常有用,因为它可以避免并发更新时的冲突,从而提高了Redis的性能和可靠性。因此,在使用Redis进行数据存储和管理时,使用此指令可以大大提高应用程序的效率。
incr
incr
指令用于将键存储的数字值加1,并返回加1后的值。例如,如果mykey
的值为5
,则执行以下命令将其加1:
incr mykey
此时,返回值为6
,且mykey
的值也变成了6
。但是,如果mykey
的值不是数字类型,则执行该指令会返回一个错误。
此外,incr
指令还可以用于在Redis中实现计数器。通过使用此指令,可以轻松地实现递增和递减的计数器,而无需编写复杂的代码。因此,在使用Redis进行数据存储和管理时,使用此指令可以大大提高应用程序的效率。
incrby
incrby
指令用于将键存储的数字值加上给定的数字,并返回加上给定数字后的值。例如,如果mykey
的值为10
,则执行以下命令将其加上3
:
incrby mykey 3
此时,返回值为13
,且mykey
的值也变成了13
。如果mykey
的值不是数字类型,则执行该指令会返回一个错误。与incr
指令不同的是,incrby
指令可以一次性将数字值加上任意数量的数字,从而更加灵活和方便。在使用Redis进行数据存储和管理时,使用此指令可以大大提高应用程序的效率。
incrbyfloat
incrbyfloat
命令用于将键存储的浮点数值加上给定的浮点数,并返回加上给定浮点数后的值。例如,如果mykey
的值为10.5
,则执行以下命令将其加上2.0
:
incrbyfloat mykey 2.0
此时,返回值为12.5
,且mykey
的值也变成了12.5
。如果mykey
的值不是浮点数类型,则执行该指令会返回一个错误。与incrby
指令不同的是,incrbyfloat
指令可以一次性将浮点数值加上任意数量的浮点数,从而更加灵活和方便。在使用Redis进行数据存储和管理时,使用此指令可以大大提高应用程序的效率。
lcs
lcs
命令可以通过以下方式使用:假设我们有两个字符串 “ABCD” 和 “ACDF”,我们想要找到它们的最长公共子序列。我们可以使用以下命令:
lcs ABCD ACDF
该命令将返回一个数组,包含它们的最长公共子序列,即 [“A”, “C”, “D”]。
mget
mget
指令用于获取多个键的值。它可以接受多个键名作为参数,每个参数表示要获取的键名。该指令返回一个值的数组,数组中的值按照请求的顺序排列。如果某个键不存在,那么在相应的位置上,该数组将包含一个 nil
值。该指令从 Redis 1.0.0 版本开始提供。
例如,我们有两个键 key1
和 key2
,它们的值分别为 value1
和 value2
。我们可以使用以下命令获取它们的值:
mget key1 key2
该命令将返回一个包含 value1
和 value2
的数组,即 ["value1", "value2"]
。如果 key1
存在但 key2
不存在,则返回的数组为 ["value1", nil]
。
mset
mset
命令用于同时设置多个键值对。它可以接受多个参数,其中每个参数都表示一个键值对。每个键值对都由一个键和一个值组成,并按照键值对出现的顺序依次排列。该命令在设置每个键值对时都会返回一个状态回复,表示该键值对是否设置成功。
例如,我们有两个键 key1
和 key2
,它们的值分别为 value1
和 value2
。我们可以使用以下命令同时设置它们的值:
mset key1 value1 key2 value2
该命令将返回一个 OK
状态回复,表示键值对已经成功设置。如果其中某个键已经存在,则该键的原有值将被新的值替换;如果某个键不存在,则会创建一个新的键值对。
msetnx
msetnx
命令用于同时设置多个键值对,但只有在所有键都不存在时才会进行设置。它可以接受多个参数,其中每个参数都表示一个键值对。每个键值对都由一个键和一个值组成,并按照键值对出现的顺序依次排列。该命令在设置每个键值对时都会返回一个状态回复,表示该键值对是否设置成功。
例如,我们有两个键 key1
和 key2
,它们的值分别为 value1
和 value2
。如果这两个键都不存在,则使用以下命令同时设置它们的值:
msetnx key1 value1 key2 value2
该命令将返回一个整数,表示键值对是否设置成功。如果所有键都不存在,则返回值为 1
,表示所有键值对都已成功设置;如果某个键已经存在,则该键值对没有被设置,返回值为 0
。在 Redis 中,msetnx
命令可以用于实现一些非常有用的功能,例如分布式锁和并发控制等。
psetex
psetex
命令与 msetex
命令类似,但是它只能同时设置一个键值对,并且可以指定过期时间(单位为毫秒)。例如,我们想要设置键 key1
的值为 value1
,并在它被设置后 5000 毫秒后过期。我们可以使用以下命令:
psetex key1 5000 value1
该命令将返回一个 OK
状态回复,表示键值对已经成功设置和过期时间已经设置。如果键 key1
已经存在,则该键的原有值将被新的值替换;如果该键不存在,则会创建一个新的键值对。
set
set
命令用于设置键的值。它可以接受两个参数,其中第一个参数表示要设置的键名,第二个参数表示要设置的值。例如,如果我们想要将键 mykey
的值设置为 Hello World
,则可以使用以下命令:
set mykey "Hello World"
该命令将返回一个 OK
状态回复,表示键值对已经成功设置。如果键 mykey
已经存在,则该键的原有值将被新的值替换;如果该键不存在,则会创建一个新的键值对。
在 Redis 中,键的值可以是任何类型的数据,包括字符串、数字、列表、哈希、集合和有序集合等。因此,在使用 set
命令时,要确保要设置的值与键的类型兼容。例如,如果键已经被设置为一个列表对象,那么执行 set
命令将会返回一个错误。
setex
setex
命令用于设置键的值并指定过期时间。它可以接受三个参数,其中第一个参数表示要设置的键名,第二个参数表示要设置的值,第三个参数表示过期时间(单位为秒)。例如,如果我们想要将键 mykey
的值设置为 Hello World
,并在它被设置后 60 秒后过期,我们可以使用以下命令:
setex mykey 60 "Hello World"
该命令将返回一个 OK
状态回复,表示键值对已经成功设置和过期时间已经设置。如果键 mykey
已经存在,则该键的原有值将被新的值替换;如果该键不存在,则会创建一个新的键值对。在 Redis 中,过期时间是一个非常有用的特性,可以用于自动删除不再需要的键值对,从而节省内存和资源。
setnx
setnx
命令用于设置键的值,但只有在该键不存在时才会设置。它可以接受两个参数,其中第一个参数表示要设置的键名,第二个参数表示要设置的值。例如,如果我们想要将键 mykey
的值设置为 Hello World
,但只有当该键不存在时才进行设置,我们可以使用以下命令:
setnx mykey "Hello World"
如果键 mykey
不存在,则该命令将返回一个 1
状态回复,表示键值对已经成功设置。如果键 mykey
已经存在,则该命令将返回一个 0
状态回复,表示键值对没有被设置。在 Redis 中,setnx
命令可以用于实现一些非常有用的功能,例如分布式锁和并发控制等。
setrange
setrange
命令用于覆盖键的一部分内容,从而实现对字符串的修改。它可以接受三个参数,其中第一个参数表示要修改的键名,第二个参数表示要修改的起始位置,第三个参数表示要修改的新值。例如,假设我们有一个键 mykey
,它的值为 Hello World
,我们想要将其中的 World
修改为 Redis
,我们可以使用以下命令:
setrange mykey 6 "Redis"
该命令将返回一个整数,表示修改后的字符串的长度。在上面的例子中,返回值为 11
,表示修改后的字符串为 Hello Redis
。如果键不存在,则该命令会将该键的值设置为一个空字符串,并执行相应的修改操作。在 Redis 中,setrange
命令可以用于实现一些非常有用的功能,例如对字符串进行动态修改、用于位图操作等。
strlen
strlen
命令用于获取键的值的长度。它可以接受一个参数,表示要获取长度的键名。例如,如果我们想要获取键 mykey
的值的长度,则可以使用以下命令:
strlen mykey
该命令将返回一个整数,表示键 mykey
的值的长度。如果键不存在,则返回值为 0
。在 Redis 中,strlen
命令可以用于获取字符串的长度,从而进行一些有用的计算和操作。
substr
substr
命令用于获取键的子字符串。它可以接受三个参数,其中第一个参数表示要获取子字符串的键名,第二个参数表示要获取子字符串的起始位置,第三个参数表示要获取子字符串的结束位置。起始位置和结束位置都是以 0
开始的索引值,其中 0
表示字符串的第一个字符。例如,如果我们有一个键 mykey
,它的值为 Hello World
,我们想要获取其中的子字符串 World
,我们可以使用以下命令:
substr mykey 6 10
该命令将返回一个字符串,表示键 mykey
的子字符串 World
。如果结束位置超过了字符串的长度,则返回的子字符串将包含从起始位置到字符串末尾的所有字符。如果键不存在,则返回值为 nil
。在 Redis 中,substr
命令可以用于获取字符串的某个子集,从而进行一些有用的计算和操作。
3,总结
在 Redis 中,字符串是最基本的数据类型之一,也是使用最广泛的数据类型之一。字符串可以存储任何类型的数据,包括数字、文本、二进制数据等等。在 Redis 中,提供了丰富的字符串操作命令,包括用于获取、设置、修改、删除字符串的命令等等。
在字符串中,我们可以使用 set
命令设置键值对,并使用 get
命令获取键对应的值。我们也可以使用 getset
命令设置键对应的值并返回旧值。此外,我们还可以使用 append
命令将值追加到指定键的值的末尾,使用 incr
和 decr
命令分别将键存储的数字值加1和减1,使用 incrby
和 decrby
命令将键存储的数字值加上和减去给定的数字,使用 incrbyfloat
命令将键存储的浮点数值加上给定的浮点数。
在 Redis 中,我们也可以使用一些高级的字符串操作命令,例如 getrange
命令用于获取指定键值的子字符串,setrange
命令用于从指定偏移量开始替换键存储的值,strlen
命令用于获取键值的长度,substr
命令用于获取键值的子字符串,等等。此外,我们还可以使用 mget
命令同时获取多个键的值,使用 mset
命令同时设置多个键值对,以及使用 msetnx
命令同时设置多个键值对,但只有在所有键都不存在时才会进行设置。
除此之外,Redis 还提供了一些特殊的字符串操作命令,例如 setex
命令用于设置键的值和过期时间,psetex
命令用于设置键的值和过期时间(毫秒),getdel
命令用于获取并删除指定键的值,等等。
在 Redis 中,字符串操作命令非常灵活,可以满足各种不同的应用场景和需求,例如缓存、计数器、分布式锁等等。同时,由于 Redis 中的字符串操作命令非常快速和高效,因此也成为了 Redis 最受欢迎和使用的数据类型之一。