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閱讀 228,505評論 6 533
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,556評論 3 418
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 176,463評論 0 376
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,009評論 1 312
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,778評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,218評論 1 324
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,281評論 3 441
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,436評論 0 288
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 48,969評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,795評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,993評論 1 369
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,537評論 5 359
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,229評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,659評論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,917評論 1 286
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,687評論 3 392
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,990評論 2 374

推薦閱讀更多精彩內容