redis命令詳解與使用情境舉例——Hash

來源:互聯網
上載者:User
HDEL key field [field …]

刪除雜湊表 key 中的一個或多個指定域,不存在的域將被忽略。
在Redis2.4以下的版本裡, HDEL 每次只能刪除單個域,如果你需要在一個原子時間內刪除多個域,請將命令包含在 MULTI / EXEC塊內。
可用版本:
2.0.0+
時間複雜度:
O(N), N 為要刪除的域的數量。
傳回值:
被成功移除的域的數量,不包括被忽略的域。
測試資料

redis> HGETALL abbr1) "a"2) "apple"3) "b"4) "banana"5) "c"6) "cat"7) "d"8) "dog"

刪除單個域

redis> HDEL abbr a(integer) 1

刪除不存在的域

redis> HDEL abbr not-exists-field(integer) 0

刪除多個域

redis> HDEL abbr b c(integer) 2redis> HGETALL abbr1) "d"2) "dog"
HEXISTS key field

查看雜湊表 key 中,給定域 field 是否存在。
可用版本:
2.0.0+
時間複雜度:
O(1)
傳回值:
如果雜湊表含有給定域,返回 1 。
如果雜湊表不含有給定域,或 key 不存在,返回 0 。

redis> HEXISTS phone myphone(integer) 0redis> HSET phone myphone nokia-1110(integer) 1redis> HEXISTS phone myphone(integer) 1
HGET key field

返回雜湊表 key 中給定域 field 的值。
可用版本:
2.0.0+
時間複雜度:
O(1)
傳回值:
給定域的值。
當給定域不存在或是給定 key 不存在時,返回 nil 。
域存在

redis> HSET site redis redis.com(integer) 1redis> HGET site redis"redis.com" 域不存在redis> HGET site mysql(nil)
HGETALL key

返回雜湊表 key 中,所有的域和值。
在傳回值裡,緊跟每個網域名稱(field name)之後是域的值(value),所以傳回值的長度是雜湊表大小的兩倍。
可用版本:
2.0.0+
時間複雜度:
O(N), N 為雜湊表的大小。
傳回值:
以列表形式返回雜湊表的域和域的值。
若 key 不存在,返回空列表。

redis> HSET people jack "Jack Sparrow"(integer) 1redis> HSET people gump "Forrest Gump"(integer) 1redis> HGETALL people1) "jack"          # 域2) "Jack Sparrow"  # 值3) "gump"4) "Forrest Gump"
HINCRBY key field increment

為雜湊表 key 中的域 field 的值加上增量 increment 。
增量也可以為負數,相當於對給定域進行減法操作。
如果 key 不存在,一個新的雜湊表被建立並執行 HINCRBY 命令。
如果域 field 不存在,那麼在執行命令前,域的值被初始化為 0 。
對一個儲存字串值的域 field 執行 HINCRBY 命令將造成一個錯誤。
本操作的值被限制在 64 位元(bit)有符號數字表示之內。
可用版本:
2.0.0+
時間複雜度:
O(1)
傳回值:
執行 HINCRBY 命令之後,雜湊表 key 中域 field 的值。
increment 為正數

redis> HEXISTS counter page_view    # 對空域進行設定(integer) 0redis> HINCRBY counter page_view 200(integer) 200redis> HGET counter page_view"200"increment 為負數redis> HGET counter page_view"200"redis> HINCRBY counter page_view -50(integer) 150redis> HGET counter page_view"150"

嘗試對字串值的域執行HINCRBY命令

redis> HSET myhash string hello,world       # 設定一個字串值(integer) 1redis> HGET myhash string"hello,world"redis> HINCRBY myhash string 1              # 命令執行失敗,錯誤。(error) ERR hash value is not an integerredis> HGET myhash string                   # 原值不變"hello,world"
HINCRBYFLOAT key field increment

為雜湊表 key 中的域 field 加上浮點數增量 increment 。
如果雜湊表中沒有域 field ,那麼 HINCRBYFLOAT 會先將域 field 的值設為 0 ,然後再執行加法操作。
如果鍵 key 不存在,那麼 HINCRBYFLOAT 會先建立一個雜湊表,再建立域 field ,最後再執行加法操作。
當以下任意一個條件發生時,返回一個錯誤:
● 域 field 的值不是字串類型(因為 redis 中的數字和浮點數都以字串的形式儲存,所以它們都屬於字串類型)
● 域 field 當前的值或給定的增量 increment 不能解釋(parse)為雙精確度浮點數(double precision floating point number)
HINCRBYFLOAT 命令的詳細功能和 INCRBYFLOAT 命令類似,請查看 INCRBYFLOAT 命令擷取更多相關資訊。
可用版本:
2.6.0+
時間複雜度:
O(1)
傳回值:
執行加法操作之後 field 域的值。
值和增量都是普通小數

redis> HSET mykey field 10.50(integer) 1redis> HINCRBYFLOAT mykey field 0.1"10.6"

值和增量都是指數符號

redis> HSET mykey field 5.0e3(integer) 0redis> HINCRBYFLOAT mykey field 2.0e2"5200"對不存在的鍵執行 HINCRBYFLOATredis> EXISTS price(integer) 0redis> HINCRBYFLOAT price milk 3.5"3.5"redis> HGETALL price1) "milk"2) "3.5"對不存在的域進行 HINCRBYFLOATredis> HGETALL price1) "milk"2) "3.5"redis> HINCRBYFLOAT price coffee 4.5   # 新增 coffee 域"4.5"redis> HGETALL price1) "milk"2) "3.5"3) "coffee"4) "4.5"
HKEYS key

返回雜湊表 key 中的所有域。
可用版本:
2.0.0+
時間複雜度:
O(N), N 為雜湊表的大小。
傳回值:
一個包含雜湊表中所有域的表。
當 key 不存在時,返回一個空表。
雜湊表非空

redis> HMSET website google www.google.com yahoo www.yahoo.comOKredis> HKEYS website1) "google"2) "yahoo"空雜湊表/key不存在redis> EXISTS fake_key(integer) 0redis> HKEYS fake_key(empty list or set)
HLEN key

返回雜湊表 key 中域的數量。
時間複雜度:
O(1)
傳回值:
雜湊表中域的數量。
當 key 不存在時,返回 0 。

redis> HSET db redis redis.com(integer) 1redis> HSET db mysql mysql.com(integer) 1redis> HLEN db(integer) 2redis> HSET db mongodb mongodb.org(integer) 1redis> HLEN db(integer) 3
HMGET key field [field …]

返回雜湊表 key 中,一個或多個給定域的值。
如果給定的域不存在於雜湊表,那麼返回一個 nil 值。
因為不存在的 key 被當作一個空雜湊表來處理,所以對一個不存在的 key 進行 HMGET 操作將返回一個只帶有 nil 值的表。
可用版本:
2.0.0+
時間複雜度:
O(N), N 為給定域的數量。
傳回值:
一個包含多個給定域的關聯值的表,表值的排列順序和給定域參數的請求順序一樣。

redis> HMSET pet dog "doudou" cat "nounou"    # 一次設定多個域OKredis> HMGET pet dog cat fake_pet             # 傳回值的順序和傳入參數的順序一樣1) "doudou"2) "nounou"3) (nil)   
HMSET key field value [field value …]

同時將多個 field-value (域-值)對設定到雜湊表 key 中。
此命令會覆蓋雜湊表中已存在的域。
如果 key 不存在,一個空雜湊表被建立並執行 HMSET 操作。
可用版本:
2.0.0+
時間複雜度:
O(N), N 為 field-value 對的數量。
傳回值:
如果命令執行成功,返回 OK 。
當 key 不是雜湊表(hash)類型時,返回一個錯誤。

redis> HMSET website google www.google.com yahoo www.yahoo.comOKredis> HGET website google"www.google.com"redis> HGET website yahoo"www.yahoo.com"   
HSET key field value

將雜湊表 key 中的域 field 的值設為 value 。
如果 key 不存在,一個新的雜湊表被建立並進行 HSET 操作。
如果域 field 已經存在於雜湊表中,舊值將被覆蓋。
可用版本:
2.0.0+
時間複雜度:
O(1)
傳回值:
如果 field 是雜湊表中的一個建立域,並且值設定成功,返回 1 。
如果雜湊表中域 field 已經存在且舊值已被新值覆蓋,返回 0 。

redis> HSET website google "www.g.cn"       # 設定一個新域(integer) 1redis> HSET website google "www.google.com" # 覆蓋一箇舊域(integer) 0    
HSETNX key field value

將雜湊表 key 中的域 field 的值設定為 value ,若且唯若域 field 不存在。
若域 field 已經存在,該操作無效。
如果 key 不存在,一個新雜湊表被建立並執行 HSETNX 命令。
可用版本:
2.0.0+
時間複雜度:
O(1)
傳回值:
設定成功,返回 1 。
如果給定域已經存在且沒有操作被執行,返回 0 。

redis> HSETNX nosql key-value-store redis(integer) 1redis> HSETNX nosql key-value-store redis       # 操作無效,域 key-value-store 已存在(integer) 0
HVALS key

返回雜湊表 key 中所有域的值。
可用版本:
2.0.0+
時間複雜度:
O(N), N 為雜湊表的大小。
傳回值:
一個包含雜湊表中所有值的表。
當 key 不存在時,返回一個空表。
非空雜湊表

redis> HMSET website google www.google.com yahoo www.yahoo.comOKredis> HVALS website1) "www.google.com"2) "www.yahoo.com"空雜湊表/不存在的keyredis> EXISTS not_exists(integer) 0redis> HVALS not_exists(empty list or set)

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.