redis原始碼分析(五)、redis命令學習總結—雜湊Hash

後開啟撒打發了發表於2017-12-20

一、介紹hasp:

大多數程式語言中的map資料結構一樣,Redis是鍵值對的集合,也就是說它存放的是字串和字串之間的對映。由於這個特性,hash特別適用於儲存一個物件。將一個物件儲存在hash中會佔用更少的記憶體,並且可以方便地存取整個物件。

二、命令學習

1、Hset

Redis Hset 命令用於為雜湊表中的欄位賦值 。

如果雜湊表不存在,一個新的雜湊表被建立並進行 HSET 操作。

如果欄位已經存在於雜湊表中,舊值將被覆蓋。

用法:

redis 127.0.0.1:6379> HSET KEY_NAME FIELD VALUE

返回值:如果欄位是雜湊表中的一個新建欄位,並且值設定成功,返回 1 。 如果雜湊表中域欄位已經存在且舊值已被新值覆蓋,返回 0 。

示例:

redis 127.0.0.1:6379> HSET myhash field1 "foo"
OK
redis 127.0.0.1:6379> HGET myhash field1
"foo"
 
redis 127.0.0.1:6379> HSET website google "www.g.cn"       # 設定一個新域
(integer) 1
 
redis 127.0.0.1:6379>HSET website google "www.google.com" # 覆蓋一箇舊域
(integer) 0

2、Hget

Redis Hget 命令用於返回雜湊表中指定欄位的值。

redis 127.0.0.1:6379> HGET KEY_NAME FIELD_NAME

返回給定欄位的值。如果給定的欄位或 key 不存在時,返回 nil 。 示例:

redis> HSET site redis redis.com
(integer) 1

redis> HGET site redis
"redis.com"


# 欄位不存在

redis> HGET site1 mysql
(nil)

3、Hdel

Redis Hdel 命令用於刪除雜湊表 key 中的一個或多個指定欄位,不存在的欄位將被忽略。

redis 127.0.0.1:6379> HDEL KEY_NAME FIELD1.. FIELDN

返回值: 被成功刪除欄位的數量,不包括被忽略的欄位。

示例:

redis 127.0.0.1:6379> HSET myhash field1 "foo"
(integer) 1
redis 127.0.0.1:6379> HDEL myhash field1
(integer) 1
redis 127.0.0.1:6379> HDEL myhash field2
(integer) 0

4、Hexists

Hexists 命令用於檢視雜湊表的指定欄位是否存在。

redis 127.0.0.1:6379> HEXISTS KEY_NAME FIELD_NAME

如果雜湊表含有給定欄位,返回 1 。 如果雜湊表不含有給定欄位,或 key 不存在,返回 0 。

redis 127.0.0.1:6379> HSET myhash field1 "foo"
(integer) 1
redis 127.0.0.1:6379> HEXISTS myhash field1
(integer) 1
redis 127.0.0.1:6379> HEXISTS myhash field2
(integer) 0

5、Hgetall

Redis Hgetall 命令用於返回雜湊表中,所有的欄位和值。

在返回值裡,緊跟每個欄位名(field name)之後是欄位的值(value),所以返回值的長度是雜湊表大小的兩倍。

用法:

redis 127.0.0.1:6379> HGETALL KEY_NAME

返回值: 以列表形式返回雜湊表的欄位及欄位值。 若 key 不存在,返回空列表。

示例:

redis 127.0.0.1:6379> HSET myhash field1 "Hello"
(integer) 1
redis 127.0.0.1:6379> HSET myhash field2 "World"
(integer) 1
redis 127.0.0.1:6379> HGETALL myhash
1) "field1"
2) "Hello"
3) "field2"
4) "World"

6、Hincrby

Redis Hincrby 命令用於為雜湊表中的欄位值加上指定增量值。

增量也可以為負數,相當於對指定欄位進行減法操作。

如果雜湊表的 key 不存在,一個新的雜湊表被建立並執行 HINCRBY 命令。

如果指定的欄位不存在,那麼在執行命令前,欄位的值被初始化為 0 。

對一個儲存字串值的欄位執行 HINCRBY 命令將造成一個錯誤。

本操作的值被限制在 64 位(bit)有符號數字表示之內。

用法:

redis 127.0.0.1:6379> HINCRBY KEY_NAME FIELD_NAME INCR_BY_NUMBER

返回值: 執行 HINCRBY 命令之後,雜湊表中欄位的值。

redis 127.0.0.1:6379> HSET myhash field1 20
(integer) 1
redis 127.0.0.1:6379> HINCRBY myhash field 1
(integer) 21
redis 127.0.0.1:6379> HINCRBY myhash field -1
(integer) 20

7、Hincrbyfloat

Redis Hincrbyfloat 命令用於為雜湊表中的欄位值加上指定浮點數增量值。

如果指定的欄位不存在,那麼在執行命令前,欄位的值被初始化為 0 。

用法:

redis 127.0.0.1:6379> HINCRBYFLOAT KEY_NAME FIELD_NAME INCR_BY_NUMBER

返回值:執行 Hincrbyfloat 命令之後,雜湊表中欄位的值。 示例:

redis 127.0.0.1:6379> HSET myhash field 20.50
(integer) 1
redis 127.0.0.1:6379> HINCRBYFLOAT mykey field 0.1
"20.60"

8、Hkeys

Redis Hkeys 命令用於獲取雜湊表中的所有欄位名。

用法:

redis 127.0.0.1:6379> HKEYS KEY_NAME FIELD_NAME INCR_BY_NUMBER

返回值: 包含雜湊表中所有欄位的列表。 當 key 不存在時,返回一個空列表。 示例:

redis 127.0.0.1:6379> HSET myhash field1 "foo"
(integer) 1
redis 127.0.0.1:6379> HSET myhash field2 "bar"
(integer) 1
redis 127.0.0.1:6379> HKEYS myhash
1) "field1"
2) "field2"

9、Hlen

Redis Hlen 命令用於獲取雜湊表中欄位的數量

用法: 雜湊表中欄位的數量。 當 key 不存在時,返回 0 。

redis 127.0.0.1:6379> HLEN KEY_NAME

示例:

redis 127.0.0.1:6379> HSET myhash field1 "foo"
(integer) 1
redis 127.0.0.1:6379> HSET myhash field2 "bar"
(integer) 1
redis 127.0.0.1:6379> HLEN myhash
(integer) 2

10、Hmget

Redis Hmget 命令用於返回雜湊表中,一個或多個給定欄位的值。

如果指定的欄位不存在於雜湊表,那麼返回一個 nil 值。

用法:

redis 127.0.0.1:6379> HMGET KEY_NAME FIELD1...FIELDN

返回值: 一個包含多個給定欄位關聯值的表,表值的排列順序和指定欄位的請求順序一樣。

示例:

redis 127.0.0.1:6379> HSET myhash field1 "foo"
(integer) 1
redis 127.0.0.1:6379> HSET myhash field2 "bar"
(integer) 1
redis 127.0.0.1:6379> HMGET myhash field1 field2 nofield
1) "foo"
2) "bar"
3) (nil)

11、Hmset

Redis Hmset 命令用於同時將多個 field-value (欄位-值)對設定到雜湊表中。

此命令會覆蓋雜湊表中已存在的欄位。

如果雜湊表不存在,會建立一個空雜湊表,並執行 HMSET 操作。

用法:

redis 127.0.0.1:6379> HMSET KEY_NAME FIELD1 VALUE1 ...FIELDN VALUEN

返回值:執行成功,返回ok

示例:

redis 127.0.0.1:6379> HSET myhash field1 "foo" field2 "bar"
OK
redis 127.0.0.1:6379> HGET myhash field1
"foo"
redis 127.0.0.1:6379> HMGET myhash field2
"bar"

12、Hsetnx

Redis Hsetnx 命令用於為雜湊表中不存在的的欄位賦值 。

如果雜湊表不存在,一個新的雜湊表被建立並進行 HSET 操作。

如果欄位已經存在於雜湊表中,操作無效。

如果 key 不存在,一個新雜湊表被建立並執行 HSETNX 命令。

用法:

redis 127.0.0.1:6379> HSETNX KEY_NAME FIELD VALUE

返回值: 設定成功,返回 1 。 如果給定欄位已經存在且沒有操作被執行,返回 0 。

示例:

redis 127.0.0.1:6379> HSETNX myhash field1 "foo"
(integer) 1
redis 127.0.0.1:6379> HSETNX myhash field1 "bar"
(integer) 0
redis 127.0.0.1:6379> HGET myhash field1
"foo"
 
redis 127.0.0.1:6379> HSETNX nosql key-value-store redis
(integer) 1
 
redis 127.0.0.1:6379> HSETNX nosql key-value-store redis       # 操作無效, key-value-store 已存在
(integer) 0

13、Hvals

Redis Hvals 命令返回雜湊表所有欄位的值。

用法:

redis 127.0.0.1:6379> HVALS KEY_NAME FIELD VALUE

返回值: 一個包含雜湊表中所有值的表。 當 key 不存在時,返回一個空表。

示例:

redis 127.0.0.1:6379> HSET myhash field1 "foo"
(integer) 1
redis 127.0.0.1:6379> HSET myhash field2 "bar"
(integer) 1
redis 127.0.0.1:6379> HVALS myhash
1) "foo"
2) "bar"

# 空雜湊表/不存在的key

redis 127.0.0.1:6379> EXISTS not_exists
(integer) 0

redis 127.0.0.1:6379> HVALS not_exists
(empty list or set)

相關文章