Redis学习与实战之字符串命令

字符串命令

一、基本字符串命令

1.基本字符串操作命令(设置、取值、删除、取长度)
命令名称 命令功能 执行时间复杂度
Set 为指定的一个键设置对应的值,如果已经存在,则直接覆盖原来的值 O(1)
Mset 对多个键设置对应的值,如果值已经存在,则直接覆盖原来的值。该命令是原子操作 O(n)
MSetNX 对多个键设置对应的值,该命令不允许指定的任何一个键已经存在,如果其中有一个键已经存在,则该命令执行失败 O(n)
Get 得到一个指定键的字符串值,如果键不存在,则返回nil;如果值不是字符串则返回一个错误信息,因为该命令只能处理String类型的值 O(1)
MGet 得到所有指定键的字符串值,与Get区别是可以同时指定多个键,同时获取多个值 O(n)
Del 删除指定键的值 O(1)
StrLen 获取指定键的长度 O(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.当前的值增加指定数后,不能解析为一个双精度的浮点数

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 160,646评论 4 366
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,979评论 1 301
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 110,391评论 0 250
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,356评论 0 215
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,740评论 3 293
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,836评论 1 224
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 32,022评论 2 315
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,764评论 0 204
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,487评论 1 246
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,728评论 2 252
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,200评论 1 263
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,548评论 3 260
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,217评论 3 241
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,134评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,921评论 0 201
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,919评论 2 283
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,766评论 2 274

推荐阅读更多精彩内容