Redis為k-v形式的內(nèi)存數(shù)據(jù)庫(kù)吆寨,其v對(duì)應(yīng)多種數(shù)據(jù)結(jié)構(gòu)存儲(chǔ)形式,String就是其中一種悬钳,一起來(lái)學(xué)習(xí)String
的各種命令吧!
APPEND key value
- 可用版本: v2.0.0開(kāi)始
- 時(shí)間復(fù)雜度: O(1)
-
解釋: 如果key早已存在并且存儲(chǔ)類型為字符串昧碉,此命令將value附加到該string末尾宙刘。如果key不存在,Redis將會(huì)創(chuàng)建該key并設(shè)置為空字符串鲁僚,因此在這種特殊情況下
APPEND
與SET
相似。 - 返回值: Integer(整型),返回附加操作后的字符串長(zhǎng)度
-
時(shí)間序列模式
APPEND
命令可以用來(lái)創(chuàng)建一個(gè)由固定大小的樣品組成的非常緊湊的列表冰沙,這樣的列表被稱為時(shí)間序列
侨艾,每當(dāng)一個(gè)新的樣品到達(dá)時(shí)我們可以用下面的命令來(lái)存儲(chǔ)它:
APPEND timeseries "fixed-size" sample
訪問(wèn)時(shí)間出列中單獨(dú)的元素并不困難:-
STRLEN
可以用來(lái)獲取樣品的數(shù)量 -
GETRANGE
允許隨機(jī)訪問(wèn)元素。如果時(shí)間序列具有相關(guān)聯(lián)的時(shí)間信息拓挥,我們可以輕松的通過(guò)GETRANGE
與Redis v2.6中可用的Lua腳本引擎相結(jié)合來(lái)輕松實(shí)現(xiàn)二進(jìn)制搜索以獲取范圍唠梨。 -
SETRANGE
可以用來(lái)覆蓋一個(gè)存在的時(shí)間序列
這種模式的局限性是被強(qiáng)制在append-only
操作中,因?yàn)镽edis目前缺少可以裁剪string對(duì)象的命令所以沒(méi)有辦法將時(shí)間序列裁剪為指定大小撞叽。然而以這種方式存儲(chǔ)的時(shí)間序列的空間效率是顯著的姻成。
提示:可以根據(jù)當(dāng)前的Unix時(shí)間切換到不同的鍵,這樣每個(gè)鍵可以只有相對(duì)少量的樣本愿棋,避免處理非常大的鍵科展,并使這種模式更友好分布在多個(gè)Redis實(shí)例中
-
DECR key
- 可用版本: v1.0.0開(kāi)始
- 時(shí)間復(fù)雜度: O(1)
- 解釋: 將存儲(chǔ)在key的值減1。如果key不存在糠雨,在執(zhí)行操作之前將會(huì)被置為0才睹,如果key包含錯(cuò)誤類型的值或者包含一個(gè)不能表示為整數(shù)的值,將會(huì)返回錯(cuò)誤甘邀。此操作僅限于64位有符號(hào)整數(shù)琅攘。
- 返回值: Integer(整型),返回減法操作后的值
DECRBY key decrement
- 可用版本: v1.0.0開(kāi)始
- 時(shí)間復(fù)雜度: O(1)
-
解釋: 與
DECR
命令同為減法操作松邪,不同的是DECR
為減一坞琴,而DECRBY
則是減去指定的變量,如果decrement為負(fù)數(shù)逗抑,則與INCRBY
功能相同剧辐。如果key不存在,則在執(zhí)行操作之前會(huì)將key置為0邮府,如果key包含錯(cuò)誤類型的值或者包含一個(gè)不能表示為整數(shù)的值荧关,將會(huì)返回錯(cuò)誤。此操作僅限于64位有符號(hào)整數(shù)褂傀。 - 返回值: Integer(整型)忍啤,返回操作后的值
GET key
- 可用版本: v1.0.0開(kāi)始
- 時(shí)間復(fù)雜度: O(1)
-
解釋: 獲取key對(duì)應(yīng)的value,如果key不存在將會(huì)返回nil仙辟。
GET
只能操作string類型同波,如果key存儲(chǔ)的不是string類型,命令將會(huì)返回錯(cuò)誤欺嗤。 - 返回值: Bulk String(批量字符串)参萄,返回key對(duì)應(yīng)的value,如果key不存在將會(huì)返回nil煎饼。
GETDEL key
- 可用版本: v6.2.0開(kāi)始
- 時(shí)間復(fù)雜度: O(1)
- 解釋: 獲取key對(duì)應(yīng)的值并且刪除key(只能操作于string類型)
- 返回值: Bulk String(批量字符串)讹挎,如果key不存在返回nil校赤。如果key不是string類型,返回錯(cuò)誤筒溃。
GETEX key [ EX seconds | PX milliseconds | EXAT unix-time-seconds | PXAT unix-time-milliseconds | PERSIST]
- 可用版本: v6.2.0開(kāi)始
- 時(shí)間復(fù)雜度: O(1)
- 解釋: 獲取key的值马篮,同時(shí)可以選擇設(shè)置key的有效期。
-
選項(xiàng)說(shuō)明:
-
EX
以秒為單位設(shè)置key的有效期 -
PX
以毫秒為單位設(shè)置key的有效期 -
EXAT
將有效期設(shè)置為精確到秒的時(shí)間戳 -
PXAT
將有效期設(shè)置為精確到毫秒的時(shí)間戳 -
PERSIST
移除相關(guān)聯(lián)的key的有效期
-
- 返回值: Bulk String(批量字符串)怜奖,key不存在返回nil浑测,否則返回key對(duì)應(yīng)的value
GETRANGE key start end
- 可用版本: v2.4.0開(kāi)始
- 時(shí)間復(fù)雜度: O(N),其中N為返回字符串的長(zhǎng)度歪玲。
-
解釋: 返回存儲(chǔ)在key中字符串的子串迁央,子串由偏移量
start
和end
組成的閉區(qū)間決定,如果偏移量為負(fù)數(shù)滥崩,表示從字符串的結(jié)尾開(kāi)始便宜:-1表示最后一個(gè)字符岖圈,-2表示倒數(shù)第二個(gè)字符等。如果偏移量超出字符串長(zhǎng)度范圍钙皮,則將會(huì)被限制在字符串長(zhǎng)度范圍內(nèi)蜂科。 - 返回值: Bulk String(批量字符串)
GETSET key value
-
可用版本: v1.0.0開(kāi)始,從v6.2.0開(kāi)始短条,此命令被視為廢棄导匣,可以被帶有
GET
選項(xiàng)的SET
命令替代 - 時(shí)間復(fù)雜度: O(1)
-
解釋: 設(shè)置key的值的同時(shí)返回key存儲(chǔ)的舊值。如果key持有的不是string類型將會(huì)返回錯(cuò)誤茸时。
SET
成功后贡定,key之前所有的有效期將會(huì)被丟棄。 -
設(shè)計(jì)模式:
GETSET
可以與INCR
一起用于原子復(fù)位計(jì)數(shù)可都。比如:當(dāng)有程序檢測(cè)到有事件發(fā)生時(shí)厕氨,可以調(diào)用INCR
命令,如果需要獲取并重置計(jì)數(shù)器的值時(shí)汹粤,可以調(diào)用GETSET
命令。 - 返回值: Bulk String(批量字符串)田晚,返回存儲(chǔ)在key中的舊值或者nil(當(dāng)key不存在時(shí))嘱兼。
INCR key
- 可用版本: v1.0.0開(kāi)始
- 時(shí)間復(fù)雜度: O(1)
- 解釋: 將存儲(chǔ)在key中的值加1,如果key不存在則命令在執(zhí)行操作前會(huì)先將key的值置為0贤徒。如果key持有的數(shù)據(jù)類型不是string或者無(wú)法表示為一個(gè)整數(shù)時(shí)將會(huì)返回錯(cuò)誤芹壕。同時(shí)此命令被限制在操作64位有符號(hào)整數(shù)范圍內(nèi)。
- 返回值: Integer(整型)接奈,返回加1操作后的值
INCRBY key increment
- 可用版本: v1.0.0開(kāi)始
- 時(shí)間復(fù)雜度: O(1)
-
解釋: 此命令與
INCR
相似踢涌,不同之處在于此命令將由調(diào)用者指定增量,如果增量為1序宦,則與INCR
命令功能一樣睁壁。 - 返回值: Integer(整型),返回加法操作后的值
INCRBYFLOAT key increment
- 可用版本: v2.6.0開(kāi)始
- 時(shí)間復(fù)雜度: O(1)
-
解釋: 與命令
INCRBY key increment
相似,不同的是此命令增量可以設(shè)置為雙精度浮點(diǎn)數(shù)(float)潘明,如果增量被指定為負(fù)數(shù)行剂,則表示減法(默認(rèn)加法操作)。如果key不存在钳降,則命令在執(zhí)行操作之前將會(huì)把key置為0厚宰,如果發(fā)生以下情況之一,將會(huì)返回錯(cuò)誤:- key持有的錯(cuò)誤類型的值(非string類型)
- key當(dāng)前持有的值或者指定的增量(increment)無(wú)法被解析為雙精度浮點(diǎn)類型
字符串鍵中已經(jīng)包含的值和增量參數(shù)都可以選擇以指數(shù)表示法提供遂填,但是增量后計(jì)算的值始終以相同的格式存儲(chǔ):一個(gè)整數(shù)后跟(如果需要)一個(gè)點(diǎn)铲觉,以及表示數(shù)字的小數(shù)部分的可變位數(shù)。始終刪除尾隨零吓坚,無(wú)論計(jì)算的實(shí)際內(nèi)部精度如何撵幽,輸出的精度都固定在小數(shù)點(diǎn)后17位。
- 返回值: Bulk String(批量字符串)凌唬,返回命令執(zhí)行操作后key所持有的值
LCS key1 key2 [LEN] [IDX] [MINMATCHLEN len] [WITHMATCHLEN]
- 可用版本: v7.0.0開(kāi)始
-
時(shí)間復(fù)雜度: O(N*M)并齐,其中N為
s1
的長(zhǎng)度,M為s2
的長(zhǎng)度 -
解釋:
LCS
命令實(shí)現(xiàn)最長(zhǎng)公共子序列算法客税,與最長(zhǎng)公共字符串算法不同的是况褪,最長(zhǎng)公共子序列算法在字符串中匹配的字符不需要是連續(xù)的,例如字符串fao
和fo
的最長(zhǎng)公共子序列結(jié)果為fo
更耻。LCS
命令在計(jì)算兩個(gè)字符串有多相似時(shí)是非常有用的测垛,比如計(jì)算DNA序列的相似程度。 -
選項(xiàng)說(shuō)明:
-
LEN
返回匹配結(jié)果的長(zhǎng)度 -
IDX
返回每個(gè)匹配結(jié)果的匹配位置 -
MINMATCHLEN
限制匹配列表的最小長(zhǎng)度 -
WITHMATCHLEN
與IDX
搭配使用秧均,同時(shí)返回匹配長(zhǎng)度
-
-
返回值:
- 沒(méi)有指定修飾符:返回表示匹配到的最長(zhǎng)子序列的Bulk String(批量字符串)
- 如果指定了
LEN
修飾符將會(huì)返回最長(zhǎng)子序列的長(zhǎng)度 - 如果指定了
IDX
修飾符食侮,將會(huì)返回一個(gè)數(shù)組,其中包含LCS長(zhǎng)度和兩個(gè)字符串(s1目胡,s2)中的所有范圍锯七、每個(gè)字符串的開(kāi)始和結(jié)束偏移量,其中有匹配項(xiàng)誉己。當(dāng)給定 WITHMATCHLEN 時(shí)眉尸,表示匹配的每個(gè)數(shù)組也將具有匹配的長(zhǎng)度
MGET key [key ...]
- 可用版本: v1.0.0開(kāi)始
- 時(shí)間復(fù)雜度: O(N),N為給定key的數(shù)量
- 解釋: 返回指定key(s)的值巨双,對(duì)于不存在的key或者持有值不是string的key噪猾,將會(huì)返回nil,命令總是成功筑累。
- 返回值: Array(數(shù)組)袱蜡,返回由指定key(s )的值組成的數(shù)組
MSET key value [ key value ...]
- 可用版本: v1.0.1開(kāi)始
- 時(shí)間復(fù)雜度: O(N),N為key的數(shù)量
-
解釋: 批量設(shè)置key-value鍵值對(duì)慢宗。如果key存在坪蚁,命令將會(huì)用新值替換key的舊值奔穿,
MSET
操作是原子性的。 -
返回值: Simple String(簡(jiǎn)單字符串)迅细,命令總是返回
OK
巫橄。
MSETNX key value [ key value ...]
- 可用版本: v1.0.1開(kāi)始
- 時(shí)間復(fù)雜度: O(N),N為key的數(shù)量
-
解釋: 與
MSET
功能一樣茵典,批量設(shè)置key-value鍵值對(duì)湘换,不同的是如果指定的key已經(jīng)存在MSETNX
不會(huì)對(duì)于該key不會(huì)執(zhí)行任何操作。同樣统阿,MSETNX
也是原子性的 -
返回值: Integer(整型)
- 如果所有給定的key都被設(shè)置了則返回1
- 如果沒(méi)有key被設(shè)置則返回0
PSETEX key milliseconds value
- 可用版本: v2.6.0開(kāi)始
- 時(shí)間復(fù)雜度: O(1)
- 解釋: 以毫秒為單位設(shè)置key的有效期
-
返回值: Simple String(簡(jiǎn)單字符串)彩倚,返回
OK
SET key value [ NX | XX] [GET] [ EX seconds | PX milliseconds | EXAT unix-time-seconds | PXAT unix-time-milliseconds | KEEPTTL]
- 可用版本: v1.0.0開(kāi)始
-
歷史:
- v2.6.12開(kāi)始支持
EX
,PX
扶平,NX
和XX
選項(xiàng) - v6.0.0開(kāi)始支持
KEEPTTL
選項(xiàng) - v6.2.0開(kāi)始支持
GET
帆离,EXAT
和PXAT
選項(xiàng) - v7.0.0開(kāi)始支持
NX
和GET
一起使用
- v2.6.12開(kāi)始支持
- 時(shí)間復(fù)雜度: O(1)
- 解釋: 將key設(shè)置為字符串value,如果key早已存在结澄,無(wú)論舊值類型是什么哥谷,命令都將會(huì)覆蓋舊值。執(zhí)行操作之前的任何有效期都會(huì)被丟棄麻献。
-
選項(xiàng)說(shuō)明:
-
EX
以秒為單位設(shè)置key的有效期為多少秒 -
PX
以毫秒為單位設(shè)置key的有效期為多少毫秒 -
EXAT
將key的有效截止時(shí)間點(diǎn)設(shè)置為精確到秒的時(shí)間戳 -
PXAT
將key的有效截止時(shí)間點(diǎn)設(shè)置為精確到毫秒的時(shí)間戳 -
NX
只有當(dāng)key不存在時(shí)才設(shè)置 -
XX
只有當(dāng)key已經(jīng)存在時(shí)才設(shè)置 -
KEEPTTL
保留key既有的有效期 -
GET
返回key的舊值们妥,如果key不存在則返回nil。如果key所持有的的舊值不是string類型勉吻,則終止SET
操作监婶。
-
-
返回值:
- Simple String(簡(jiǎn)單字符串):如果
SET
正確執(zhí)行將返回OK
- Null Reply(nil): 如果用戶指定了
NX
或者XX
選項(xiàng),并且SET
操作沒(méi)有被執(zhí)行則返回nil
如果調(diào)用方指定了GET
選項(xiàng)齿桃,將會(huì)以下面兩種形式返回(無(wú)論SET
命令是否執(zhí)行): - Bulk String(批量字符串):如果key存在惑惶,返回key對(duì)應(yīng)的舊值
- Null Reply(nil):如果key不存在返回nil
- Simple String(簡(jiǎn)單字符串):如果
-
模式: 命令
SET resource-name anystring NX EX max-lock-time
是使用Redis實(shí)現(xiàn)鎖的一種簡(jiǎn)單方式《套荩客戶端可以通過(guò)上述命令返回的OK
獲得鎖(或者當(dāng)返回nil時(shí)過(guò)一段時(shí)間再重試)带污,并且通過(guò)命令DEL
移除鎖。
當(dāng)有效期到達(dá)后鎖將自動(dòng)釋放香到」涡蹋可以通過(guò)以下兩點(diǎn)來(lái)使鎖系統(tǒng)更加健壯:- 設(shè)置隨機(jī)字符串(Token)而不是設(shè)置固定字符串
- 通過(guò)腳本當(dāng)Token匹配時(shí)才刪除key而不是簡(jiǎn)單的通過(guò)
DEL
命令移除鎖
上述兩點(diǎn)避免了當(dāng)鎖過(guò)期后,客戶端再次嘗試釋放另一個(gè)客戶端創(chuàng)建的鎖养渴。
SETEX key seconds value
- 可用版本: v2.0.0開(kāi)始
- 時(shí)間復(fù)雜度: O(1)
-
解釋: 將key的值設(shè)置為字符串value,同時(shí)設(shè)置key的有效期為指定的秒數(shù)泛烙,如果秒數(shù)不可用將會(huì)返回錯(cuò)誤理卑。
SETEX
是原子操作。 - 返回值: Simple String(簡(jiǎn)單字符串)
SETNX key value
- 可用版本: v1.0.0開(kāi)始
- 時(shí)間復(fù)雜度: O(1)
- 解釋: 如果key不存在則將key的值設(shè)置為字符串value蔽氨,如果key早已存在則不執(zhí)行任何操作藐唠。
-
返回值: Integer(整型)
- 如果key被設(shè)置了返回1
- 如果key沒(méi)被設(shè)置返回0
SETRANGE key offset value
- 可用版本: v2.2.0開(kāi)始
- 時(shí)間復(fù)雜度: 如果字符串很小帆疟,不計(jì)算拷貝字符串帶來(lái)的開(kāi)銷時(shí)時(shí)間復(fù)雜度為O(1),否則時(shí)間復(fù)雜度為O(M)宇立,M為value的長(zhǎng)度
-
解釋: 從指定offset開(kāi)始到結(jié)尾的覆蓋key持有的字符串值踪宠,如果offset大于key持有字符串的當(dāng)前長(zhǎng)度,則用零字節(jié)填充字符串以使offset適合妈嘹,不存在的鍵被視為空字符串柳琢,因此此命令將確保它包含足夠大的字符串以能夠在偏移量處設(shè)置值。
注意润脸,offset可以設(shè)置的最大值為2^29-1(536870911)柬脸,因?yàn)镽edis字符串類型最大長(zhǎng)度為512MB,如果需要增長(zhǎng)超過(guò)這個(gè)限制毙驯,可以使用多個(gè)key倒堕。 - 返回值: Integer(整型),返回命令執(zhí)行后key持有的字符串的長(zhǎng)度爆价。
STRLEN key
- 可用版本: v2.2.0開(kāi)始
- 時(shí)間復(fù)雜度: O(1)
- 解釋: 返回key持有的字符串的長(zhǎng)度垦巴,如果value不是字符串類型,則返回錯(cuò)誤
- 返回值: Integer(整型)铭段,返回key對(duì)應(yīng)字符串的長(zhǎng)度骤宣,如果key不存在則返回0
SUBSTR key start end
- 可用版本: v1.0.0開(kāi)始,從Redis v2.0.0開(kāi)始此命令被視為廢棄
- 時(shí)間復(fù)雜度: O(N)稠项,其中N為返回的字符串的長(zhǎng)度
-
解釋: 返回key持有的字符串值的子串涯雅,子串由
start
和end
決定組成的閉區(qū)間決定,負(fù)數(shù)的偏移量表示從字符串尾部開(kāi)始計(jì)算偏移量展运,如-1表示字符串最后一個(gè)字符活逆。 - 返回值: Bulk String(批量字符串),返回子串