Redis為k-v形式的內(nèi)存數(shù)據(jù)庫,其v對應(yīng)多種數(shù)據(jù)結(jié)構(gòu)存儲形式,String就是其中一種,一起來學(xué)習(xí)String的各種命令吧!
APPEND key value
- 可用版本: v2.0.0開始
- 時間復(fù)雜度: O(1)
-
解釋: 如果key早已存在并且存儲類型為字符串,此命令將value附加到該string末尾。如果key不存在,Redis將會創(chuàng)建該key并設(shè)置為空字符串,因此在這種特殊情況下
APPEND與SET相似。 - 返回值: Integer(整型),返回附加操作后的字符串長度
-
時間序列模式
APPEND命令可以用來創(chuàng)建一個由固定大小的樣品組成的非常緊湊的列表,這樣的列表被稱為時間序列,每當(dāng)一個新的樣品到達(dá)時我們可以用下面的命令來存儲它:
APPEND timeseries "fixed-size" sample
訪問時間出列中單獨(dú)的元素并不困難:-
STRLEN可以用來獲取樣品的數(shù)量 -
GETRANGE允許隨機(jī)訪問元素。如果時間序列具有相關(guān)聯(lián)的時間信息,我們可以輕松的通過GETRANGE與Redis v2.6中可用的Lua腳本引擎相結(jié)合來輕松實(shí)現(xiàn)二進(jìn)制搜索以獲取范圍。 -
SETRANGE可以用來覆蓋一個存在的時間序列
這種模式的局限性是被強(qiáng)制在append-only操作中,因?yàn)镽edis目前缺少可以裁剪string對象的命令所以沒有辦法將時間序列裁剪為指定大小。然而以這種方式存儲的時間序列的空間效率是顯著的。
提示:可以根據(jù)當(dāng)前的Unix時間切換到不同的鍵,這樣每個鍵可以只有相對少量的樣本,避免處理非常大的鍵,并使這種模式更友好分布在多個Redis實(shí)例中
-
DECR key
- 可用版本: v1.0.0開始
- 時間復(fù)雜度: O(1)
- 解釋: 將存儲在key的值減1。如果key不存在,在執(zhí)行操作之前將會被置為0,如果key包含錯誤類型的值或者包含一個不能表示為整數(shù)的值,將會返回錯誤。此操作僅限于64位有符號整數(shù)。
- 返回值: Integer(整型),返回減法操作后的值
DECRBY key decrement
- 可用版本: v1.0.0開始
- 時間復(fù)雜度: O(1)
-
解釋: 與
DECR命令同為減法操作,不同的是DECR為減一,而DECRBY則是減去指定的變量,如果decrement為負(fù)數(shù),則與INCRBY功能相同。如果key不存在,則在執(zhí)行操作之前會將key置為0,如果key包含錯誤類型的值或者包含一個不能表示為整數(shù)的值,將會返回錯誤。此操作僅限于64位有符號整數(shù)。 - 返回值: Integer(整型),返回操作后的值
GET key
- 可用版本: v1.0.0開始
- 時間復(fù)雜度: O(1)
-
解釋: 獲取key對應(yīng)的value,如果key不存在將會返回nil。
GET只能操作string類型,如果key存儲的不是string類型,命令將會返回錯誤。 - 返回值: Bulk String(批量字符串),返回key對應(yīng)的value,如果key不存在將會返回nil。
GETDEL key
- 可用版本: v6.2.0開始
- 時間復(fù)雜度: O(1)
- 解釋: 獲取key對應(yīng)的值并且刪除key(只能操作于string類型)
- 返回值: Bulk String(批量字符串),如果key不存在返回nil。如果key不是string類型,返回錯誤。
GETEX key [ EX seconds | PX milliseconds | EXAT unix-time-seconds | PXAT unix-time-milliseconds | PERSIST]
- 可用版本: v6.2.0開始
- 時間復(fù)雜度: O(1)
- 解釋: 獲取key的值,同時可以選擇設(shè)置key的有效期。
-
選項(xiàng)說明:
-
EX以秒為單位設(shè)置key的有效期 -
PX以毫秒為單位設(shè)置key的有效期 -
EXAT將有效期設(shè)置為精確到秒的時間戳 -
PXAT將有效期設(shè)置為精確到毫秒的時間戳 -
PERSIST移除相關(guān)聯(lián)的key的有效期
-
- 返回值: Bulk String(批量字符串),key不存在返回nil,否則返回key對應(yīng)的value
GETRANGE key start end
- 可用版本: v2.4.0開始
- 時間復(fù)雜度: O(N),其中N為返回字符串的長度。
-
解釋: 返回存儲在key中字符串的子串,子串由偏移量
start和end組成的閉區(qū)間決定,如果偏移量為負(fù)數(shù),表示從字符串的結(jié)尾開始便宜:-1表示最后一個字符,-2表示倒數(shù)第二個字符等。如果偏移量超出字符串長度范圍,則將會被限制在字符串長度范圍內(nèi)。 - 返回值: Bulk String(批量字符串)
GETSET key value
-
可用版本: v1.0.0開始,從v6.2.0開始,此命令被視為廢棄,可以被帶有
GET選項(xiàng)的SET命令替代 - 時間復(fù)雜度: O(1)
-
解釋: 設(shè)置key的值的同時返回key存儲的舊值。如果key持有的不是string類型將會返回錯誤。
SET成功后,key之前所有的有效期將會被丟棄。 -
設(shè)計(jì)模式:
GETSET可以與INCR一起用于原子復(fù)位計(jì)數(shù)。比如:當(dāng)有程序檢測到有事件發(fā)生時,可以調(diào)用INCR命令,如果需要獲取并重置計(jì)數(shù)器的值時,可以調(diào)用GETSET命令。 - 返回值: Bulk String(批量字符串),返回存儲在key中的舊值或者nil(當(dāng)key不存在時)。
INCR key
- 可用版本: v1.0.0開始
- 時間復(fù)雜度: O(1)
- 解釋: 將存儲在key中的值加1,如果key不存在則命令在執(zhí)行操作前會先將key的值置為0。如果key持有的數(shù)據(jù)類型不是string或者無法表示為一個整數(shù)時將會返回錯誤。同時此命令被限制在操作64位有符號整數(shù)范圍內(nèi)。
- 返回值: Integer(整型),返回加1操作后的值
INCRBY key increment
- 可用版本: v1.0.0開始
- 時間復(fù)雜度: O(1)
-
解釋: 此命令與
INCR相似,不同之處在于此命令將由調(diào)用者指定增量,如果增量為1,則與INCR命令功能一樣。 - 返回值: Integer(整型),返回加法操作后的值
INCRBYFLOAT key increment
- 可用版本: v2.6.0開始
- 時間復(fù)雜度: O(1)
-
解釋: 與命令
INCRBY key increment相似,不同的是此命令增量可以設(shè)置為雙精度浮點(diǎn)數(shù)(float),如果增量被指定為負(fù)數(shù),則表示減法(默認(rèn)加法操作)。如果key不存在,則命令在執(zhí)行操作之前將會把key置為0,如果發(fā)生以下情況之一,將會返回錯誤:- key持有的錯誤類型的值(非string類型)
- key當(dāng)前持有的值或者指定的增量(increment)無法被解析為雙精度浮點(diǎn)類型
字符串鍵中已經(jīng)包含的值和增量參數(shù)都可以選擇以指數(shù)表示法提供,但是增量后計(jì)算的值始終以相同的格式存儲:一個整數(shù)后跟(如果需要)一個點(diǎn),以及表示數(shù)字的小數(shù)部分的可變位數(shù)。始終刪除尾隨零,無論計(jì)算的實(shí)際內(nèi)部精度如何,輸出的精度都固定在小數(shù)點(diǎn)后17位。
- 返回值: Bulk String(批量字符串),返回命令執(zhí)行操作后key所持有的值
LCS key1 key2 [LEN] [IDX] [MINMATCHLEN len] [WITHMATCHLEN]
- 可用版本: v7.0.0開始
-
時間復(fù)雜度: O(N*M),其中N為
s1的長度,M為s2的長度 -
解釋:
LCS命令實(shí)現(xiàn)最長公共子序列算法,與最長公共字符串算法不同的是,最長公共子序列算法在字符串中匹配的字符不需要是連續(xù)的,例如字符串fao和fo的最長公共子序列結(jié)果為fo。LCS命令在計(jì)算兩個字符串有多相似時是非常有用的,比如計(jì)算DNA序列的相似程度。 -
選項(xiàng)說明:
-
LEN返回匹配結(jié)果的長度 -
IDX返回每個匹配結(jié)果的匹配位置 -
MINMATCHLEN限制匹配列表的最小長度 -
WITHMATCHLEN與IDX搭配使用,同時返回匹配長度
-
-
返回值:
- 沒有指定修飾符:返回表示匹配到的最長子序列的Bulk String(批量字符串)
- 如果指定了
LEN修飾符將會返回最長子序列的長度 - 如果指定了
IDX修飾符,將會返回一個數(shù)組,其中包含LCS長度和兩個字符串(s1,s2)中的所有范圍、每個字符串的開始和結(jié)束偏移量,其中有匹配項(xiàng)。當(dāng)給定 WITHMATCHLEN 時,表示匹配的每個數(shù)組也將具有匹配的長度
MGET key [key ...]
- 可用版本: v1.0.0開始
- 時間復(fù)雜度: O(N),N為給定key的數(shù)量
- 解釋: 返回指定key(s)的值,對于不存在的key或者持有值不是string的key,將會返回nil,命令總是成功。
- 返回值: Array(數(shù)組),返回由指定key(s )的值組成的數(shù)組
MSET key value [ key value ...]
- 可用版本: v1.0.1開始
- 時間復(fù)雜度: O(N),N為key的數(shù)量
-
解釋: 批量設(shè)置key-value鍵值對。如果key存在,命令將會用新值替換key的舊值,
MSET操作是原子性的。 -
返回值: Simple String(簡單字符串),命令總是返回
OK。
MSETNX key value [ key value ...]
- 可用版本: v1.0.1開始
- 時間復(fù)雜度: O(N),N為key的數(shù)量
-
解釋: 與
MSET功能一樣,批量設(shè)置key-value鍵值對,不同的是如果指定的key已經(jīng)存在MSETNX不會對于該key不會執(zhí)行任何操作。同樣,MSETNX也是原子性的 -
返回值: Integer(整型)
- 如果所有給定的key都被設(shè)置了則返回1
- 如果沒有key被設(shè)置則返回0
PSETEX key milliseconds value
- 可用版本: v2.6.0開始
- 時間復(fù)雜度: O(1)
- 解釋: 以毫秒為單位設(shè)置key的有效期
-
返回值: Simple String(簡單字符串),返回
OK
SET key value [ NX | XX] [GET] [ EX seconds | PX milliseconds | EXAT unix-time-seconds | PXAT unix-time-milliseconds | KEEPTTL]
- 可用版本: v1.0.0開始
-
歷史:
- v2.6.12開始支持
EX,PX,NX和XX選項(xiàng) - v6.0.0開始支持
KEEPTTL選項(xiàng) - v6.2.0開始支持
GET,EXAT和PXAT選項(xiàng) - v7.0.0開始支持
NX和GET一起使用
- v2.6.12開始支持
- 時間復(fù)雜度: O(1)
- 解釋: 將key設(shè)置為字符串value,如果key早已存在,無論舊值類型是什么,命令都將會覆蓋舊值。執(zhí)行操作之前的任何有效期都會被丟棄。
-
選項(xiàng)說明:
-
EX以秒為單位設(shè)置key的有效期為多少秒 -
PX以毫秒為單位設(shè)置key的有效期為多少毫秒 -
EXAT將key的有效截止時間點(diǎn)設(shè)置為精確到秒的時間戳 -
PXAT將key的有效截止時間點(diǎn)設(shè)置為精確到毫秒的時間戳 -
NX只有當(dāng)key不存在時才設(shè)置 -
XX只有當(dāng)key已經(jīng)存在時才設(shè)置 -
KEEPTTL保留key既有的有效期 -
GET返回key的舊值,如果key不存在則返回nil。如果key所持有的的舊值不是string類型,則終止SET操作。
-
-
返回值:
- Simple String(簡單字符串):如果
SET正確執(zhí)行將返回OK - Null Reply(nil): 如果用戶指定了
NX或者XX選項(xiàng),并且SET操作沒有被執(zhí)行則返回nil
如果調(diào)用方指定了GET選項(xiàng),將會以下面兩種形式返回(無論SET命令是否執(zhí)行): - Bulk String(批量字符串):如果key存在,返回key對應(yīng)的舊值
- Null Reply(nil):如果key不存在返回nil
- Simple String(簡單字符串):如果
-
模式: 命令
SET resource-name anystring NX EX max-lock-time是使用Redis實(shí)現(xiàn)鎖的一種簡單方式。客戶端可以通過上述命令返回的OK獲得鎖(或者當(dāng)返回nil時過一段時間再重試),并且通過命令DEL移除鎖。
當(dāng)有效期到達(dá)后鎖將自動釋放??梢酝ㄟ^以下兩點(diǎn)來使鎖系統(tǒng)更加健壯:- 設(shè)置隨機(jī)字符串(Token)而不是設(shè)置固定字符串
- 通過腳本當(dāng)Token匹配時才刪除key而不是簡單的通過
DEL命令移除鎖
上述兩點(diǎn)避免了當(dāng)鎖過期后,客戶端再次嘗試釋放另一個客戶端創(chuàng)建的鎖。
SETEX key seconds value
- 可用版本: v2.0.0開始
- 時間復(fù)雜度: O(1)
-
解釋: 將key的值設(shè)置為字符串value,同時設(shè)置key的有效期為指定的秒數(shù),如果秒數(shù)不可用將會返回錯誤。
SETEX是原子操作。 - 返回值: Simple String(簡單字符串)
SETNX key value
- 可用版本: v1.0.0開始
- 時間復(fù)雜度: O(1)
- 解釋: 如果key不存在則將key的值設(shè)置為字符串value,如果key早已存在則不執(zhí)行任何操作。
-
返回值: Integer(整型)
- 如果key被設(shè)置了返回1
- 如果key沒被設(shè)置返回0
SETRANGE key offset value
- 可用版本: v2.2.0開始
- 時間復(fù)雜度: 如果字符串很小,不計(jì)算拷貝字符串帶來的開銷時時間復(fù)雜度為O(1),否則時間復(fù)雜度為O(M),M為value的長度
-
解釋: 從指定offset開始到結(jié)尾的覆蓋key持有的字符串值,如果offset大于key持有字符串的當(dāng)前長度,則用零字節(jié)填充字符串以使offset適合,不存在的鍵被視為空字符串,因此此命令將確保它包含足夠大的字符串以能夠在偏移量處設(shè)置值。
注意,offset可以設(shè)置的最大值為2^29-1(536870911),因?yàn)镽edis字符串類型最大長度為512MB,如果需要增長超過這個限制,可以使用多個key。 - 返回值: Integer(整型),返回命令執(zhí)行后key持有的字符串的長度。
STRLEN key
- 可用版本: v2.2.0開始
- 時間復(fù)雜度: O(1)
- 解釋: 返回key持有的字符串的長度,如果value不是字符串類型,則返回錯誤
- 返回值: Integer(整型),返回key對應(yīng)字符串的長度,如果key不存在則返回0
SUBSTR key start end
- 可用版本: v1.0.0開始,從Redis v2.0.0開始此命令被視為廢棄
- 時間復(fù)雜度: O(N),其中N為返回的字符串的長度
-
解釋: 返回key持有的字符串值的子串,子串由
start和end決定組成的閉區(qū)間決定,負(fù)數(shù)的偏移量表示從字符串尾部開始計(jì)算偏移量,如-1表示字符串最后一個字符。 - 返回值: Bulk String(批量字符串),返回子串