Redis基本資料型別Hash詳解

2020-10-10 17:00:13

4.6 Hash(雜湊)資料型別詳解

4.6.1 簡介

首先想一下,我們Java中的Hash,形式為<key,value>

那麼在我們的redis中存放了這個hash

即為: key—<key,value> 形式

資料型別中的hash所有的命令,都是以h開頭


4.6.2 新增獲取及批次新增獲取與獲取全部

hset key field value 新增hash

hget key field 獲取hash

hmset key field vlaue field value … 批次新增hash

hget key field field … 批次獲取hash

hgetall key 獲取全部一個key下的全部hash

##新增hash
127.0.0.1:6379> hset hash h1 v1 
(integer) 1

##獲取hash
127.0.0.1:6379> hget hash h1
"v1"


##批次新增hash
127.0.0.1:6379> hmset hash1 h1 v1 h2 v2
OK

##批次獲取hash
127.0.0.1:6379> hmget hash1 h1 h2 
1) "v1"
2) "v2"


##批次新增hash,field相同的情況下,更新該資料
127.0.0.1:6379> hmset hash h1 v11 h2 v2
OK

##批次獲取hash 這裡的h1已經被更新
127.0.0.1:6379> hmget hash h1 h2 
1) "v11"
2) "v2"


##獲取該Key下的全部hash
127.0.0.1:6379> hgetall hash
1) "h1"
2) "v11"
3) "h2"
4) "v2"

##獲取該Key下的全部hash
127.0.0.1:6379> hgetall hash1
1) "h1"
2) "v1"
3) "h2"
4) "v2"
127.0.0.1:6379> 

4.6.3 刪除hash指定key欄位

hdel key field

##批次獲取
127.0.0.1:6379> hmget hash h1 h2 
1) "v11"
2) "v2"

##刪除hash指定的field 
127.0.0.1:6379> hdel hash h1
(integer) 1

##批次獲取
127.0.0.1:6379> hmget hash h1 h2 
1) (nil)
2) "v2"
127.0.0.1:6379> 

4.6.4 獲取key中的hash鍵值對數量

hlen key

##獲取全部的keys
127.0.0.1:6379> keys *
(empty array)

##批次新增hash
127.0.0.1:6379> hmset hash h1 v1 h2 v2 h3 v3 
OK

##獲取某個Key下的所有鍵值對
127.0.0.1:6379> hgetall hash
1) "h1"
2) "v1"
3) "h2"
4) "v2"
5) "h3"
6) "v3"

##查詢key下的鍵值對數量
127.0.0.1:6379> hlen hash
(integer) 3
127.0.0.1:6379> 


4.6.5 判斷hash中指定的欄位是否存在

hexists key field

##獲取全部的keys
127.0.0.1:6379> keys *
(empty array)
##批次新增hash
127.0.0.1:6379> hmset hash h1 v1 h2 v2 h3 v3 
OK

##獲取某個Key下的所有鍵值對
127.0.0.1:6379> hgetall hash
1) "h1"
2) "v1"
3) "h2"
4) "v2"
5) "h3"
6) "v3"

##查詢key下的鍵值對數量
127.0.0.1:6379> hlen hash
(integer) 3


##判斷hash下的某個欄位是否存在
127.0.0.1:6379> hexists hash h1
(integer) 1
##判斷hash下的某個欄位是否存在
127.0.0.1:6379> hexists hash h2
(integer) 1
##判斷hash下的某個欄位是否存在
127.0.0.1:6379> hexists hash h4
(integer) 0
127.0.0.1:6379> 

4.6.6 獲取hash的field欄位或Value值

hkeys key

hvals key

##查詢所有的key
127.0.0.1:6379> keys *
1) "hash"

127.0.0.1:6379> hgetall hash
1) "h1"
2) "v1"
3) "h2"
4) "v2"
5) "h3"
6) "v3"

127.0.0.1:6379> hkeys hash
1) "h1"
2) "h2"
3) "h3"

127.0.0.1:6379> hvals hash
1) "v1"
2) "v2"
3) "v3"
127.0.0.1:6379> 


4.6.7 指定hash自增或自減

##批次新增hash 
127.0.0.1:6379> hmset hash h1 v1 h2 1
OK

##查詢hash的value
127.0.0.1:6379> hvals hash
1) "v1"
2) "1"

##查詢所有鍵值對
127.0.0.1:6379> hgetall hash
1) "h1"
2) "v1"
3) "h2"
4) "1"

##設定自增,步長為1
127.0.0.1:6379> hincrby hash h2 1
(integer) 2

##獲取全部鍵值對
127.0.0.1:6379> hgetall hash
1) "h1"
2) "v1"
3) "h2"
4) "2"

##設定自增,步長為2
127.0.0.1:6379> hincrby hash h2 2
(integer) 4

##獲取全部鍵值對
127.0.0.1:6379> hgetall hash
1) "h1"
2) "v1"
3) "h2"
4) "4"

##設定自增,步長為-2 實際就是
##hdecrby 
127.0.0.1:6379> hincrby hash h2 -2
(integer) 2

##獲取全部鍵值對
127.0.0.1:6379> hgetall hash
1) "h1"
2) "v1"
3) "h2"
4) "2"
127.0.0.1:6379> 


4.6.8 hsetnx方法,類似於String中的setnx

hsetnx key field value

##查詢所有的key
127.0.0.1:6379> keys *
1) "hash"

##獲取hash的所有鍵值對
127.0.0.1:6379> hgetall hash
1) "h1"
2) "v1"
3) "h2"
4) "2"

##獲取hash的所有keys
127.0.0.1:6379> hkeys hash
1) "h1"
2) "h2"

##新增一個鍵值對,
##如果key存在則新增失敗
127.0.0.1:6379> hsetnx hash h2 1
(integer) 0

##新增一個鍵值對,
##如果key不存在,則新增成功
127.0.0.1:6379> hsetnx hash h3 1
(integer) 1

##查詢hash的所有keys
127.0.0.1:6379> hkeys hash
1) "h1"
2) "h2"
3) "h3"

##查詢hash的所有values
127.0.0.1:6379> hvals hash
1) "v1"
2) "2"
3) "1"
127.0.0.1:6379> 

4.6.9 Hash的應用

可以存放我們的程式設計資料,比如使用者資訊user,尤其是使用者資訊的儲存或者經常變動的資訊

我們可以把user當作一個Key,然後hash裡面設定相應的值,name age gender

##批次插入使用者屬性
127.0.0.1:6379> hmset user:1 user1:name zhangsan user1:age 10 user1:gender man 
OK

##批次獲取使用者屬性
127.0.0.1:6379> hmget user:1  user1:name user1:age user1:gender
1) "zhangsan"
2) "10"
3) "man"

##批次獲取key下的對應的hash的keys 
127.0.0.1:6379> hkeys user:1
1) "user1:name"
2) "user1:age"
3) "user1:gender"
127.0.0.1:6379> 


hash更適合儲存物件,string更適合儲存字串