首先想一下,我們Java中的Hash,形式為<key,value>
那麼在我們的redis中存放了這個hash
即為: key—<key,value> 形式
資料型別中的hash所有的命令,都是以h開頭
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>
##批次獲取
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>
##獲取全部的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>
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>
##查詢所有的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>
##批次新增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>
##查詢所有的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>
可以存放我們的程式設計資料,比如使用者資訊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更適合儲存字串