Redis 的命令詳解 - String 篇

相關文章redis

Redis 的命令詳解 - Key 篇
Redis 的命令詳解 - Hash 篇
Redis 的命令詳解 - List 篇
Redis 的命令詳解 - SET 篇數組

String 命令詳解

跟 String 相關的命令一共有 24 種,這裏只介紹經常使用的。想查看所有命令請參考官網安全

SET : 添加一個鍵值對

起始版本: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

  • EX 秒 : 設置生存時間,以秒爲單位
  • PX 毫秒 : 設置生存時間,以毫秒爲單位
  • NX : key 不存在時才添加
  • XX : key 存在時才添加

注意:因爲 SET 命令的選項能夠替換 SETNX、SETEX、PSETEX,所以在 Redis 的將來版本中,這三個命令可能會被棄用並最終刪除。 cdn

返回值

  • 若是沒有知足 NX 或 XX 的條件致使 set 命令沒有執行,返回 null
  • set 成功,返回ok

MSET : 批量添加鍵值對

起始版本:1.0.1
時間複雜度:O(N),其中N是要設置的鍵值對數量blog

將給定的 key 設置其各自的 value
與常規 SET 同樣,MSET 用新 value 替換舊 value。若是您不想覆蓋現有值,請使用 MSETNX內存

MSET 是原子性操做,全部的鍵值對都是同時set的。客戶端不會看到某些鍵值對已經set 而某些鍵值對尚未set

語法

MSET key1 value1 [key2 value2...]

返回值

  • 老是OK,由於MSET不會失敗。

MSETNX : 安全批量添加鍵值對

起始版本:1.0.1
時間複雜度:O(N),其中N是要設置的鍵值對數量

將給定的 key 設置其各自的 value
MSET 不一樣,只要有一個 key 已存在,全部的鍵值對都不會被 set。因爲這種特性,MSETNX 能夠實現要麼全部的操做都成功,要麼全部的操做都失敗。

MSETNX 也是原子性的,set 時,全部的鍵值對都是同時set的。客戶端不會看到某些鍵值對已經set 而某些鍵值對尚未set

語法

MSETNX key1 value1 [key2 value2 ...]

返回值

  • 1 : 全部鍵值對都添加成功
  • 0 : 全部鍵值對都添加失敗

SETRANGE : 覆蓋 key 對應 vlue 的部分字符

起始版本: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

  • 下標從 0 開始
  • 包含下標自己
  • 不能使用負下標

返回值

修改後的字符串長度

應用

有了SETRANGEGETRANGE 命令,你能夠把 Redis 的字符串當成線性數組,隨機訪問,時間複雜度只有O(1)。這在不少真實場景應用裏很是快和高效。

GETSET : 設置 key 的 value 並返回舊 value

起始版本:1.0.0
時間複雜度:O(1)

設置 key 爲新 value,並返回舊 value,該操做是原子性的

語法

GETSET key value

返回值

  • 若是 key 不存在,返回 null
  • 若是 value 不是 string 類型,返回錯誤
  • 成功,則返回舊 value

APPEND : 給 value 追加字符

起始版本:2.0.0
時間複雜度:O(1) 。假設附加值很小,而且已經存在的值具備任意大小,則攤銷時間複雜度爲O(1) ,由於Redis使用的動態字符串庫會使每一個從新分配上的可用空間加倍。

  • 若是 key 已經存在,而且在 value字符串類型APPEND 命令將在 value 的末尾追加字符。
  • 若是 key 已經存在,但 value 不是字符串類型APPEND 命令會報錯
  • 若是 key 不存在,則建立。此時,做用相似於SET。

語法

APPEND key 字符串

返回值

追加後,value 的長度

GET : 獲取一個key的value

起始版本:1.0.0
時間複雜度:O(1)

語法

GET key

返回值

  • 若是 key 不存在,返回 nil
  • 若是 value 不是 string 類型, 返回錯誤
  • 正常狀況,返回 value

MGET : 獲取多個 key 的 value

起始版本:1.0.0
時間複雜度:O(N),其中N是 key 的數目。

語法

MGET key1 [key2...]

返回值

  • 若是 key 不存在,返回 nil
  • 若是 value 不是 string 類型, 返回錯誤
  • 正常狀況,返回 value 列表
redis> SET key1 "Hello"
"OK"
redis> SET key2 "World"
"OK"
redis> MGET key1 key2 nonexisting
1) "Hello"
2) "World"
3) (nil)
複製代碼

GETRANGE : 獲取一個key的value的子串

起始版本:2.4.0
時間複雜度:O(N),N是字符串長度,複雜度由最終返回長度決定,但因爲經過一個字符串建立子字符串是很容易的,它能夠被認爲是O(1)。

警告:這個命令改過名字,在小於2.0的Redis版本中叫SUBSTR。 
複製代碼

語法

GETRANGE key 開始下標 結束下標

下標從0開始,包括開始下標,也包括結束下標

可使用負數下標。好比 -1 表示倒數第一個

返回值

  • 若是 key 不存在,返回 nil
  • 若是 value 不是 string 類型, 返回錯誤
  • 正常狀況,返回子串

STRLEN : 獲取 key 對應 value 的字符串長度

起始版本:2.2.0
時間複雜度:O(1)

語法

STRLEN key

返回值

  • 字符串的長度
  • 0,key不存在, 或者 value 爲 ""
  • 錯誤,當 value 不是 string 類型時

INCR : 給 value 加 1

起始版本:1.0.0
時間複雜度:O(1)

key 對應的 value 加一。

  • 若是 key 不存在,則建立 key 並設置 value 爲 0 後,在加 1。
  • 若是 value 值不能轉換成整數(好比 value 是 hash 類型、value 是 「ABC」、value 爲 1.5),則返回錯誤。

此操做僅限於64位帶符號整數。

注意:這是一個字符串操做,由於Redis沒有專用的整數類型。存儲在key處的字符串被解釋爲以10進制的64位帶符號整數來執行該操做。

語法

INCR key

返回值

加後的值

INCRBY : 給 value 加上一個整數

起始版本:1.0.0
時間複雜度:O(1)

key 對應的 value 加上一個整數。

  • 若是 key 不存在,則建立 key 並設置 value 爲 0 後,在加上設置的整數。
  • 若是 value 值不能轉換成整數(好比 value 是 hash 類型、value 是 「ABC」、value 爲 1.5),則返回錯誤。

此操做僅限於64位帶符號整數。

語法

INCRBY key 整數

返回值

加後的值

INCRBYFLOAT : 給 value 加上一個數(能夠是浮點數)

起始版本:2.6.0
時間複雜度:O(1)

key 對應的 value 加上一個數(能夠是浮點數)。

  • 若是 key 不存在,則建立 key 並設置 value 爲 0 後,在加上設置的數(能夠是浮點數)。
  • 若是 value 值不能轉換成數(能夠是浮點數)(好比 value 是 hash 類型、value 是 「ABC」),則返回錯誤。

語法

INCRBYFLOAT key 數

返回值

加後的值。無論原始值是多少,也無論加的值是多少,最終結果最多隻會保留小數點後17位,所以精度可能會有損失。

DECR : 給 value 減 1

起始版本:1.0.0
時間複雜度:O(1)

key 對應的 value 減一。

  • 若是 key 不存在,則建立 key 並設置 value 爲 0 後,在減 1。
  • 若是 value 值不能轉換成整數(好比 value 是 hash 類型、value 是 「ABC」、value 爲 1.5),則返回錯誤。

此操做僅限於64位帶符號整數。

語法

DECR key

返回值

減後的值

DECRBY : 給 value 減去一個整數

起始版本:1.0.0
時間複雜度:O(1)

key 對應的 value 減去一個整數。

  • 若是 key 不存在,則建立 key 並設置 value 爲 0 後,在減去設置的整數。
  • 若是 value 值不能轉換成整數(好比 value 是 hash 類型、value 是 「ABC」、value 爲 1.5),則返回錯誤。

此操做僅限於64位帶符號整數。

語法

DECRBY key 整數

返回值

減後的值

相關文章
相關標籤/搜索