Redis命令詳解 Hash

2022-06-23 13:45:10 字數 4396 閱讀 7935

hash是一種string型別的field、value的對映表,因此,它非常適合儲存物件。下面我們來一一介紹與hash相關的命令。

hdel

最早可用版本:2.0.0

時間複雜度:o(n),其中n為要刪除的field的個數

hdel命令用於刪除指定key的指定的乙個或多個field。如果指定的field不存在於指定的key中則會被忽略,如果指定的key不存在,會當做空的hash進行處理,向客戶端返回0。

命令的返回值是實際刪除的field的個數,不包括不存在的field。

從2.4.0版本開始,該命令支援一次刪除多個field。在此之前,如果想一次性刪除多個field,只能利用redis的事務來實現。

hexists

最早可用版本:2.0.0

時間複雜度:o(1)

hexists命令用來驗證指定的key是否包含指定的field,如果包含,返回1;如果不包含或者key不存在,返回0。

hget

最早可用版本:2.0.0

時間複雜度:o(1)

返回指定的key中指定的field對應的value。如果field不在key中或者key不存在,則返回nil。

hgetall

最早可用版本:2.0.0

時間複雜度:o(n),n為hash的大小,即key中field的個數。

返回key所儲存的所有field以及field對應的value。每個value跟在field的後面被返回,因此,返回值的長度是hash的size的2倍。如果key不存在,則返回空列表。

123

4567

891011

127.0.0.1:6379> hgetall noexist

(empty list or set)

127.0.0.1:6379> hset mykey field1 "follow"

(integer) 1

127.0.0.1:6379> hset mykey field2 "jackeyzhe2018"

(integer) 1

127.0.0.1:6379> hgetall mykey

1) "field1"

2) "follow"

3) "field2"

4) "jackeyzhe2018"

hincrby

最早可用版本:2.0.0

時間複雜度:o(1)

用法:

1

hincrby key field increment

用來對指定key的指定field進行增量操作,返回計算後的結果。如果key不存在,或者key中不包含指定的field,則會先建立乙個value為0的hash,如果value不是數字型別,則會報錯。該命令支援的數字範圍是64位有符號整數。

123

4567

891011

1213

1415

1617

1819

2021

2223

24

127.0.0.1:6379> keys * #演示使用,生產環境不要用

1) "mykey"

127.0.0.1:6379> hincrby myhash field1 1

(integer) 1

127.0.0.1:6379> hget myhash field1

"1"127.0.0.1:6379> hset myhash fieldstr "follow"

(integer) 1

127.0.0.1:6379> hincrby myhash fieldstr 1

(error) err hash value is not an integer

127.0.0.1:6379> hgetall myhash

1) "field1"

2) "1"

3) "fieldstr"

4) "follow"

127.0.0.1:6379> hincrby myhash field2 2

(integer) 2

127.0.0.1:6379> hgetall myhash

1) "field1"

2) "1"

3) "fieldstr"

4) "follow"

5) "field2"

6) "2"

hincrbyfloat

最早可用版本:2.6.0

時間複雜度:o(1)

用來對指定的key中指定的field進行浮點型別的加法,如果field不存在,則會先建立乙個value為0的field。如果value或者increments不能解析為float型別,則會報錯。通過下面的例子可以看到,浮點數的加法會存在一些偏差。

123

4567

8910

127.0.0.1:6379> hincrbyfloat myhash field3 0.3

"0.3"

127.0.0.1:6379> hincrbyfloat myhash field3 1.0e3

"1000.29999999999999999"

127.0.0.1:6379> hincrbyfloat myhash field3 -1.0e3

"0.29999999999999999"

127.0.0.1:6379> hincrbyfloat myhash fieldstr 0.1

(error) err hash value is not a float

127.0.0.1:6379> hincrbyfloat myhash field3 "haha"

(error) err value is not a valid float

hkeys

最早可用版本:2.0.0

時間複雜度:o(n),其中n為指定key中field的個數

hkeys命令用於返回指定key中所包含的field列表,如果key不存在,則返回空列表。

hlen

最早可用版本:2.0.0

時間複雜度:o(1)

返回指定的key所包含的field的個數。如果key不存在,則返回0。

hmget

最早可用版本:2.0.0

時間複雜度:o(n):n是請求的field的個數

返回指定key中指定的乙個或多個field的值。如果field不存在,則返回nil,如果key不存在,同樣會返回field數量的nil。因為不存在的key被作為空的hash處理。

123

4567

127.0.0.1:6379> hmget myhash field1 field2 no-exist

1) "1"

2) "2"

3) (nil)

127.0.0.1:6379> hmget no-exist field1 field2

1) (nil)

2) (nil)

hmset

最早可用版本:2.0.0

時間複雜度:o(n):n是需要設定的field的個數

為指定的key設定乙個或多個field。如果field已經存在,則會被覆蓋。如果指定的key不存在,則會建立乙個新的hash。

hscan

最早可用版本:2.8.0

時間複雜度:每次請求的時間複雜度為o(1),完成整個迭代的時間複雜度為o(n)

該命令與scan命令相似,可以參考我的另外一篇文章redis命令詳解:keys中對scan用法的介紹,如果你想要有更深入了了解,可以看我的另外一篇文章深入理解redis的scan命令。

hset

最早可用版本:2.0.0

時間複雜度:o(1)

為指定的key中的field設定value,如果key不存在,則會建立乙個新的hash,如果field已經存在,則會覆蓋舊值。如果是新增的field,設定完成後會返回1,如果是更新已有的field,設定完成後會返回0。

hsetnx

最早可用版本:2.0.0

時間複雜度:o(1)

同樣是為指定的key中的field設定value,與hset命令不同的是,如果field已經存在,則不會有任何操作,直接返回0。

hstrlen

最早可用版本:3.2.0

時間複雜度:o(1)

返回指定key中field對應value的字串長度,如果key或field不存在,返回0。

hvals

最早可用版本:2.0.0

時間複雜度:o(n),n為hash的size

返回指定key的hash的所有value。如果key不存在,則會返回空列表。

Redis 雜湊(Hash)命令詳解

官網中文連線 將雜湊表 key 中的字段 field 的值設為 value 如果欄位是雜湊表中的乙個新建字段,並且值設定成功,返回 1 如果雜湊表中域字段已經存在且舊值已被新值覆蓋,返回 0 獲取儲存在雜湊表中指定欄位的值。返回給定欄位的值。如果給定的字段或 key 不存在時,返回 nil 獲取在雜...

Redis 的命令詳解 Hash 篇

說明 由於 reids 的 hash 型別的格式如下,為了方便區分,裡層的 key 我稱呼為字段。key 起始版本 2.0.0 時間複雜度 新增乙個欄位 值對為o 1 新增多個字段 值對為o n n為字段 值對的數量。從redis 4.0.0開始,hset 允許新增多個字段 值對。hset key ...

redis集合hash命令

1 hset 設定字段值 語法 hset key field value hset fern name lym hset fern email fern 163.com 2 hget 獲取字段值 語法 hget key field hget fern name 3 hmset 批量設定字段值 語法 ...