相關文章redis
Redis 的命令詳解 - Key 篇
Redis 的命令詳解 - Hash 篇
Redis 的命令詳解 - List 篇
Redis 的命令詳解 - SET 篇數組
跟 String 相關的命令一共有 24 種,這裏只介紹經常使用的。想查看所有命令請參考官網安全
起始版本:1.0.0
時間複雜度:O(1) 假設附加值很小,而且已經存在的值具備任意大小,則攤銷時間複雜度爲O(1),由於Redis使用的動態字符串庫會使每一個從新分配上的可用空間加倍。bash
SET
執行時,若是 key 已存在,不管其 value 是什麼類型,value 都會被覆蓋,先前與 key
關聯的生存時間將被丟棄。post
SET key value [EX 秒|PX 毫秒] [NX|XX]
spa
可選參數 從Redis 2.6.12開始,SET
支持一下選項code
注意:因爲 SET 命令的選項能夠替換 SETNX、SETEX、PSETEX,所以在 Redis 的將來版本中,這三個命令可能會被棄用並最終刪除。 cdn
set
命令沒有執行,返回 nullset
成功,返回ok起始版本:1.0.1
時間複雜度:O(N),其中N是要設置的鍵值對數量blog
將給定的 key 設置其各自的 value 。
與常規 SET
同樣,MSET
用新 value 替換舊 value。若是您不想覆蓋現有值,請使用 MSETNX
。內存
MSET
是原子性操做,全部的鍵值對都是同時set
的。客戶端不會看到某些鍵值對已經set
而某些鍵值對尚未set
MSET key1 value1 [key2 value2...]
MSET
不會失敗。起始版本:1.0.1
時間複雜度:O(N),其中N是要設置的鍵值對數量
將給定的 key 設置其各自的 value 。
與 MSET
不一樣,只要有一個 key 已存在,全部的鍵值對都不會被 set
。因爲這種特性,MSETNX
能夠實現要麼全部的操做都成功,要麼全部的操做都失敗。
MSETNX
也是原子性的,set
時,全部的鍵值對都是同時set
的。客戶端不會看到某些鍵值對已經set
而某些鍵值對尚未set
MSETNX key1 value1 [key2 value2 ...]
起始版本:2.2.0
時間複雜度:O(1)
SETRANGE
的做用是覆蓋 key 對應的 value 的一部分,從指定的下標開始覆蓋, 覆蓋的長度爲指定的字符串的長度。
若是下標超過 value 最大下標,則在 value 末尾追加字符串。
不存在的 keys 被認爲是空字符串("")。
注意,下標最大能夠是 2^29-1=536870911 ,由於 redis 字符串限制在 512M 大小。若是你須要超過這個大小,你能夠用多個keys。
警告:當 SETRANGE 從最後一個字節開始 set 時,若是 key 不存在,或者 value 是個比較小的字符串時,Redis須要當即分配內存來知足 set 後的總長度,這有可能會致使服務阻塞一會而,可是阻塞時間不會很長。 在一臺 2010MacBook Pro 上,set 536870911字節(分配512MB)須要~300ms,set 134217728字節(分配128MB)須要~80ms,set 33554432比特位(分配32MB)須要~30ms,set 8388608比特(分配8MB)須要8ms。 注意,一旦第一次內存分配完,後面對同一個key調用 SETRANGE 就不會預先獲得內存分配。
SETRANGE key 下標 value
修改後的字符串長度
有了SETRANGE
和 GETRANGE
命令,你能夠把 Redis 的字符串當成線性數組,隨機訪問,時間複雜度只有O(1)。這在不少真實場景應用裏很是快和高效。
起始版本:1.0.0
時間複雜度:O(1)
設置 key 爲新 value,並返回舊 value,該操做是原子性的
GETSET key value
起始版本:2.0.0
時間複雜度:O(1) 。假設附加值很小,而且已經存在的值具備任意大小,則攤銷時間複雜度爲O(1) ,由於Redis使用的動態字符串庫會使每一個從新分配上的可用空間加倍。
APPEND
命令將在 value 的末尾追加字符。APPEND
命令會報錯key
不存在,則建立。此時,做用相似於SET。APPEND key 字符串
追加後,value
的長度
起始版本:1.0.0
時間複雜度:O(1)
GET key
nil
起始版本:1.0.0
時間複雜度:O(N),其中N是 key 的數目。
MGET key1 [key2...]
nil
redis> SET key1 "Hello"
"OK"
redis> SET key2 "World"
"OK"
redis> MGET key1 key2 nonexisting
1) "Hello"
2) "World"
3) (nil)
複製代碼
起始版本:2.4.0
時間複雜度:O(N),N是字符串長度,複雜度由最終返回長度決定,但因爲經過一個字符串建立子字符串是很容易的,它能夠被認爲是O(1)。
警告:這個命令改過名字,在小於2.0的Redis版本中叫SUBSTR。
複製代碼
GETRANGE key 開始下標 結束下標
下標從0開始,包括開始下標,也包括結束下標。
可使用負數下標。好比 -1 表示倒數第一個nil
起始版本:2.2.0
時間複雜度:O(1)
STRLEN key
起始版本:1.0.0
時間複雜度:O(1)
將 key 對應的 value 加一。
此操做僅限於64位帶符號整數。
注意:這是一個字符串操做,由於Redis沒有專用的整數類型。存儲在key處的字符串被解釋爲以10進制的64位帶符號整數來執行該操做。
INCR key
加後的值
起始版本:1.0.0
時間複雜度:O(1)
將 key 對應的 value 加上一個整數。
此操做僅限於64位帶符號整數。
INCRBY key 整數
加後的值
起始版本:2.6.0
時間複雜度:O(1)
將 key 對應的 value 加上一個數(能夠是浮點數)。
INCRBYFLOAT key 數
加後的值。無論原始值是多少,也無論加的值是多少,最終結果最多隻會保留小數點後17位,所以精度可能會有損失。
起始版本:1.0.0
時間複雜度:O(1)
將 key 對應的 value 減一。
此操做僅限於64位帶符號整數。
DECR key
減後的值
起始版本:1.0.0
時間複雜度:O(1)
將 key 對應的 value 減去一個整數。
此操做僅限於64位帶符號整數。
DECRBY key 整數
減後的值