1.set key
加入版本 1.0.0。
時間複雜度: O(1)。
將key和value對應。如果key已經存在了,它會被覆蓋,而不管它是什麼類型。
返回值
狀態代碼:總是OK,因為SET不會失敗。
2.get key
加入版本 1.0.0。
時間複雜度: O(1)。
返回key的value。如果key不存在,返回特殊值nil。如果key的value不是string,就返回錯誤,因為GET只處理string類型的values。
返回值
Bulk reply:key對應的value,或者nil(key不存在時)
3.append key value
加入版本 2.0.0。
時間複雜度: O(1). The amortized time complexity is O(1) 因為redis用的動態字串的庫在每次分配空間的時候會增加一倍的可用空閑空間,所以在添加的value較小而且已經存在的 value是任意大小的情況下,均攤時間複雜度是O(1) 。
如果 key 已經存在,並且值為字串,那麼這個命令會把 value 追加到原來值(value)的結尾。 如果 key 不存在,那麼它將首先建立一個Null 字元串的key,再執行追加操作,這種情況 APPEND 將類似於 SET 操作。
返回值
整數回複(Integer reply):返回append後字串值(value)的長度。
4.decr key
加入版本 1.0.0。
時間複雜度: O(1)。
對key對應的數字做減1操作。如果key不存在,那麼在操作之前,這個key對應的值會被置為0。如果key有一個錯誤類型的value或者是一個不能表示成數位字串,就返回錯誤。這個操作最大支援在64位有符號的整型數字。
查看命令INCR瞭解關於增減操作的額外資訊。
返回值
數字:減小之後的value
5.incrvalue
加入版本 1.0.0。
時間複雜度: O(1)。
對key對應的數字做加1操作。如果key不存在,那麼在操作之前,這個key對應的值會被置為0。如果key有一個錯誤類型的value或者是一個不能表示成數位字串,就返回錯誤。這個操作最大支援在64位有符號的整型數字。
提醒:這是一個string操作,因為Redis沒有專用的數字類型。key對應的string都被解釋成10進位64位有符號的整型來執行這個操作。
Redis會用相應的整數表示方法儲存整數,所以對於表示數位字串,沒必要為了用字串表示整型儲存做額外開銷。
返回值:
整型數字:增加之後的value
6.decrby key decrment
加入版本 1.0.0。
時間複雜度: O(1)。
將key對應的數字減decrement。如果key不存在,操作之前,key就會被置為0。如果key的value類型錯誤或者是個不能表示成數位字串,就返回錯誤。這個操作最多支援64位有符號的正型數字。
查看命令INCR瞭解關於增減操作的額外資訊。似。
返回值:
返回一個數字:減少之後的value值。
7.incrby key increment
加入版本 1.0.0。
時間複雜度: O(1)。
將key對應的數字加decrement。如果key不存在,操作之前,key就會被置為0。如果key的value類型錯誤或者是個不能表示成數位字串,就返回錯誤。這個操作最多支援64位有符號的正型數字。
查看命令INCR瞭解關於增減操作的額外資訊。
返回值
數字:增加之後的value值。
8.getrange key start end
入版本 2.4.0。
時間複雜度: O(N) ,這裡的N是返回的string的長度。複雜度是由返回的字串長度決定的,但是因為從一個已經存在的字串建立一個子串是很容易的,所以對於較小的字串,可以認為是O(1)的複雜度。
警告:這個命令是被改成GETRANGE的,在小於2.0的Redis版本中叫SUBSTR。 返回key對應的字串value的子串,這個子串是由start和end位移決定的(兩者都在string內)。可以用負的位移來表示從string尾部開始數的下標。所以-1就是最後一個字元,-2就是倒數第二個,以此類推。
這個函數處理超出範圍的請求時,都把結果限制在string內。
返回值:
Bulk reply(專有詞彙,protocol有解釋)。
9.getset key value
加入版本 1.0.0。
時間複雜度: O(1)。
自動將key對應到value並且返回原來key對應的value。如果key存在但是對應的value不是字串,就返回錯誤。
設計模式
GETSET可以和INCR一起使用實現支援重設的計數功能。舉個例子:每當有事件發生的時候,一段程式都會調用INCR給key mycounter加1,但是有時我們需要擷取計數器的值,並且自動將其重設為0。這可以通過GETSET mycounter "0"來實現:
10.mset key value [key value```]
加入版本 1.0.1。
時間複雜度: O(N),這裡N是要set的key的個數。
對應給定的keys到他們相應的values上。MSET會用新的value替換已經存在的value,就像普通的SET命令一樣。如果你不想覆蓋已經存在的values,請參看命令MSETNX。
MSET是原子的,所以所有給定的keys是一次性set的。用戶端不可能看到這種一部分keys被更新而另外的沒有改變的情況。
返回值
狀態代碼:總是OK,因為MSET不會失敗。
11.mget key key```
加入版本 1.0.0。
時間複雜度: O(N),這裡N是要處理的key的個數。
返回所有指定的key的value。對於每個不對應string或者不存在的key,都返回特殊值nil。正因為此,這個操作從來不會失敗。
返回值
多返回值: 指定的key對應的values的list
12.setex key seconds value
加入版本 2.0.0。
時間複雜度: O(1)。
設定key對應字串value,並且設定key在給定的seconds時間之後逾時到期。這個命令等效於執行下面的命令:
SET mykey valueEXPIRE mykey seconds
SETEX是原子的,也可以通過把上面兩個命令放到MULTI/EXEC塊中執行的方式重現。相比連續執行上面兩個命令,它更快,因為當Redis當做緩衝使用時,這個操作更加常用。
返回值
狀態代碼
13.setnx key value
加入版本 1.0.0。
時間複雜度: O(1)。
如果key不存在,就設定key對應字串value。在這種情況下,該命令和SET一樣。當key已經存在時,就不做任何操作。SETNX是"SET if Not eXists"。
返回值
數字,只有以下兩種值:
- 1 如果key被set
- 0 如果key沒有被set
14.msetnx key value key value```
加入版本 1.0.1。
時間複雜度: O(N),N是要set的keys的個數。
對應給定的keys到他們相應的values上。只要有一個key已經存在,MSETNX一個操作都不會執行。 由於這種特性,MSETNX可以實現要麼所有的操作都成功,要麼一個都不執行,這樣可以用來設定不同的key,來表示一個唯一的對象的不同欄位。
MSETNX是原子的,所以所有給定的keys是一次性set的。用戶端不可能看到這種一部分keys被更新而另外的沒有改變的情況。
返回值
數字,只有以下兩種值:
- 1 如果所有的key被set
- 0 如果沒有key被set(至少其中有一個key是存在的)
15.setrange key offset value
加入版本 2.2.0。
時間複雜度: O(1),不考慮拷貝新字串的開銷。通常這個字串非常小,所以均攤代價為O(1)。如果考慮的話,複雜度就是O(M),M是參數value的長度。
這個命令的作用是覆蓋key對應的string的一部分,從指定的offset處開始,覆蓋value的長度。如果offset比當前key對應string還要長,那這個string後面就補0以達到offset。不存在的keys被認為是Null 字元串,所以這個命令可以確保key有一個足夠大的字串,能在offset處設定value。
注意,offset最大可以是229-1(536870911),因為redis字串限制在512M大小。如果你需要超過這個大小,你可以用多個keys。
警告:當set最後一個位元組並且key還沒有一個字串value或者其value是個比較小的字串時,Redis需要立即分配所有記憶體,這有可能會導致服務阻塞一會。在一台2010MacBook Pro上,set536870911位元組(分配512MB)需要~300ms,set134217728位元組(分配128MB)需要~80ms,set33554432位元位(分配32MB)需要~30ms,set8388608位元(分配8MB)需要8ms。注意,一旦第一次記憶體配置完,後面對同一個key調用SETRANGE就不會預先得到記憶體配置。
模式
正因為有了SETRANGE和類似功能的GETRANGE命令,你可以把Redis的字串當成線性數組,隨機訪問只要O(1)複雜度。這在很多真實情境應用裡非常快和高效。
返回值
數字:該命令修改後的字串長度
16.strlen key
加入版本 2.2.0。
時間複雜度: O(1)。
返回key的string類型value的長度。如果key對應的非string類型,就返回錯誤。
返回值
整型數字:key對應的字串value的長度,或者0(key不存在)
註:本文的命令詳解主要來源redis中文官網,這裡是進一步整理供學習和以後查詢使用。