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自增或自減
-
hincrby
hincrby key field increment
##批量新增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更適合存盤字串
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/167410.html
標籤:其他
上一篇:C# 運算子的綜合應用
