JobPlus知识库 IT DBA 文章
Redis学习与实战之字符串命令

字符串命令

一、基本字符串命令1.基本字符串操作命令(设置、取值、删除、取长度)

①Set命令 
语法:Set key value [EX seconds][PX milliseconds][NX|XX] 
参数说明:key value 是字符串键和值,必选项;EX是设置到期时间(单位:秒) 
PX(单位:毫秒);NX,如果指定的键不存在,仅仅是建立键名;XX,只有键存在时,才可以设置对应的值;

说明:Redis所有操作命令,语法带有”[“和”]”符号时,意味着括号内的参数是可选的,不是必填的。

例:

set bookName  "《Redis学习与实践》"   //设置键名为bookName,值为《Redis学习与实践》

OK    //返回值


set bookName "《NoSQL数据库》" EX 1    //设置bookName 1秒后过期

OK      //返回值


②MSet命令 
语法:MSet key value [key value …] 
参数说明:key为指定需要设置的字符串键,value为对应的值,可以同时设置多个键值对;返回值总是OK,因为该命令执行不会失败 
例:

MSet bookName1 "数据库学习"  bookName2  "MongoDB" //同时设置多个键值对

OK    //返回值


③MSetNX命令 
语法:MSetNX key value [key value …] 
参数说明:key是指定设置的键,value为对应的值。返回值:如果所有的键都被设置值,返回1;如果有键没有设置成功,则返回0 
例:

MSetNX bookID1 1001 bookID2 1002 bookID3 1003

(integer) 1  //三个键都设置成功,返回1

MSetNX bookID1 1001 bookID4 1004 

(integer) 0     //bookID1 已经存在,设置失败,所以会返回0 

 ``` 

④Get命令 

例:


Get bookID1 
1001 //返回值 
Get bookID5 
nil //键不存在,返回nil

⑤MGet命令 

语法:MGet key [key ...] 

参数说明:key是键名,可以指定多个键。 

返回值:返回所有指定键对应的值,以列表的形式显示,不是String值或不存在返回nil,所有该命令不会返回执行失败信息。 

例:


MGet bookName1 bookName2 bookName //同时获取3个键的值 
1)”数据库学习” 
2)”MongoDB” 
3) nil //因为前面设置了bookName过期时间为1秒,所以键已经过期,返回nil

⑥Del命令 

语法:Del key [key ...] 

参数说明:key是指定要删除的键,允许一次删除多个。 

返回值:被删除键的个数。 

例:


Set FirstName Tomcat 
ok 
Set SecondName “Tomcat2” 
ok 
Get FirstName 
“Tomcat” 
get secondName 
“Tomcat2” 
del FristName SecondName //一次删除两个键 
(integer) 2 //删除成功 返回 2 
get FirstName 
nil

>说明:del还可以删除其他类型的数据结构,如列表、集合、哈希等。  

⑦StrLen命令 

语法:StrLen key 

返回值:返回字符串的长度;如果键不存在,返回0; 

例:


set name “李思” 
ok 
STRLEN name 
(integer) 4 //一个汉字2个字节 
STRLEN sex 
0 //键不存在,返回0

####二、修改值字符串操作命令

|命令名称|命令功能|执行时间复杂度| 

|------------|:-----------|:--------------------:|

|Append|追加字符串,当键存在的时候,把新值追加到现有值的后面;如果键不存在,则创建(类型Set命令)|O(1)| 

|GetRange|得到指定范围的字符串的子字符串|O(n)| 

|GetSet|得到指定字符串键的旧值,然后为键设置新值|O(1)| 

|SetRange|替换指定字符串的一部分|O(1)| 

①Append命令 

语法:append key value 

参数说明:key为指定字符串键的名称,value为需要追加的字符串内容。 

返回值:追加字符串后,整个新字符串的长度。 

例:


get phoneNumber 
(nil) //该键对应的值不存在 
Append phoneNumber 13812348765 //创建一个新的键值对 
(integer) 11 
append phoneNumber 12 
(integer) 13 //追加后长度为13 
get phoneNumber 
1381234876512

>说明:Redis在创建新的字符串时,会给字符串增加一倍的空闲空间,所以后续增加相同大小的值的时候,所用时间复杂度为O(1)。这说明增加固定长度的字符串速度最快。 

②GetRange命令 

语法:GetRange key start end

参数说明:key为指定的键,start为开始的位置,end是结束位置。开始位置从0开始,也就是key对应值的第一个字节位置,依次类推。开始和结束位置也可以用负数表示,如-1代表最后一个位置,-2代表倒数第二个位置,依次类推。当开始和结束位置超出范围的时候,该命令会自动把结果控制在值长度范围之内。 

返回值:返回指定范围内的子字符串。 

例:


set content “this is a exam!” 
ok 
GetRange content 0 3 //字符串正向从0开始 
“this” 
GetRange content -5 -2 //从后往前数,截取子字符串 
“exam” 
GetRange content 10 20 //结束位置超出了字符串本身的长度 
“exam!” 
GetRange content 0 -1 //获取整个字符串,结束位置用-1比较方便,不用使用StrLen获取整个字符串长度 
“this is a exam!”

③GetSet命令 

语法:GetSet key value

参数说明:key是指定的键,value是要设置的新值 

返回值:返回之前的旧值,如果指定的键不存在,则返回nil 

例:


set number 1 
ok 
GETSET number 2 //给number设置新值2,并返回旧值”1” 
“1” 
get number 
“2”

>说明:GetSet主要应用场景为实现支持重置的计数功能。  

④SetRange命令 

语法:SetRange key offset  value

参数说明:offset为需要修改的开始位置,value是新的子字符串值。如果offset位置超过了指定字符串的长度,则超出部分补"0"。因此该命令可以确保在指定位置设置新的值。 

返回值:修改后的新字符串长度。 

例:


set title “learning redis” 
ok 
SETRANGE title 9 “MongoDB” 
(integer)15 
get title 
“learning MongoDB”

补"0"的例子:


SETRANGE titles 1 “学习” 
(integer) 8 
get titles 
“”\x00\学习” //一个x00表示一个0

>说明:当指定的键没有值的情况下,在指定的位置会设置新值,Redis需要立即分配内存,这有可能会造成服务器阻塞的现象出现。新值长度越大需要消耗的时间越多。

####三、修改数字值的操作命令Redis为字符串值为数字的数据提供了专门的修改操作命令,如下表所示。  

|命令名称|功能描述|时间复杂度| 

|------------|:------------:|:-------------:|

|Decr|对整数做原子减1操作|O(1)| 

|DecrBy|对整数做原子减指定数操作|O(1)| 

|Incr|对整数做原子加1操作|O(1)| 

|IncrBy|对整数做原子加指定数操作|O(1)| 

|IncrByFloat|对浮点数做原子加指定数操作|O(1)|  


①Decr命令 

语法: Decr key 

参数说明:key是指定的键,该键对应的值必须为整型。如果key不存在,则会创建新键,并设置对应的值为0. 

返回值:返回减1后的值。如果指定键对应的值不是整型,则会返回错误信息。 

例:


set count 10 
ok 
Decr count //值减1 
(integer) 9 
set count “10gg” //非整型 
ok 
DECR count 
(error) ERR value is not an integer or out of range //错误信息提示

>说明:Decr最大支持64位有符号的整型数字; 

②DecrBy命令 

语法:DecrBy key decremnet 

参数说明:key是指定要做减法操作的键,decrement是要减的数。如果key不存在,则会新建键,并设置对应的值为0。 

返回值:返回减过之后的值。如果指定键对应的值不是整型,则返回错误信息。 

例:


Set count 10 
ok 
DecrBy count 4 //一次直接减4 
(integer) 6

③Incr命令 

语法:Incr key

返回值:返回增1之后的值。如果指定的键对应的值为非整型,则返回错误信息。 

例:


set count 10 
ok 
Incr count 
(integer) 11 
get count 
“11”

>说明:Incr最大支持64位有符号的整型数字;原子递增操作最常用的使用场景是计数器、特定场景的限速器。  

④IncrBy命令 

语法:IncrBy key increment 

参数说明:increment为要增加的数字。如果key不存在,则新建键并设置对应得值为0.

返回值:增加之后的值。如果指定键对应的值为非整型,则返回错误信息。 

例:


set count 10 
ok 
IncrBy count 2 //一次增加2 
(integer) 12

⑤IncrByFloat命令 

语法:IncrByFloat key  increment 

参数说明:key是指定的键,键对应的值必须为浮点数,increment是要增加的浮点数。 

返回值:返回增加后的浮点数值。操作出错,则返回错误信息。 

例:


set price 10.2 
ok 
IncrByFloat price 0.3 //一次增加0.3 
“10.5” 
“` 
说明:当满足一下任意一个条件时,该命令会返回错误信息。 
1.key包含非法值(不是一个String) 
2.当前的值增加指定数后,不能解析为一个双精度的浮点数


如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!

¥ 打赏支持
20人赞 举报
分享到
用户评价(0)

暂无评价,你也可以发布评价哦:)

扫码APP

扫描使用APP

扫码使用

扫描使用小程序