一. 背景說明
小白:偉哥,JAVA中的Map集合類型在redis中有對應的存儲嗎?
偉哥:有的,我帶你擼一波。
二、概述
Redis的hash哈希存儲類型,類似于是java中的map存儲結構,適合用來存儲對象,每個哈希最多可以存儲4294967295(2^32-1)個字段值對,具體數量實際上也受Redis部署的虛擬機上的總內存的限制。
理解了它的數據結構后,接下來偉哥帶你開啟命令操作之旅。
三、hset、hget
hset、hget主要用來設置和獲取單條數據,格式說明如下:
#貼心測試如下:
#設置值 hset key field value
192.168.65.15:6379> hset u1 name zs
(integer) 1
#獲取值 hget key field
192.168.65.15:6379> hget u1 name
"zs"
#獲取值:如果key不存返回nil
192.168.65.15:6379> hget u2 name
(nil)
#獲取值:如果field不存返回nil
192.168.65.15:6379> hget u1 name1
(nil)
四、hmset、hmget
上述一條一條地增加數據有點繁瑣,為此,Redis準備了多條數據的操作,格式如下:
#貼心測試如下:
#批量設置值
192.168.65.15:6379> hmset u1 name zs age 22 sex boy
OK
#批量獲取值,按field順序顯示
192.168.65.15:6379> hmget u1 name age sex
1) "zs"
2) "22"
3) "boy"
#如果key不存在,則返回nil
192.168.65.15:6379> hmget u2 name
1) (nil)
#如果field不存在,則返回nil
192.168.65.15:6379> hmget u1 name name1
1) "zs"
2) (nil)
五、hincrby、hsetnx
如果value是數值類型,我們可以用hincrby來增加大小;在添加時如果key-field不存在,才實現添加,可以用hsetnx命令。具體格式如下:
#貼心測試如下:
#查看age原來的值
192.168.65.15:6379> hget u1 age
"22"
#hincrby給age增加5
192.168.65.15:6379> hincrby u1 age 5
(integer) 27
#查看增加后的結果22+5=27
192.168.65.15:6379> hget u1 age
"27"
#hsetnx設置如果field存在,則不添加
192.168.65.15:6379> hsetnx u1 age 22
(integer) 0
#查看age還是27,沒有變化
192.168.65.15:6379> hget u1 age
"27"
#hsetnx設置如果field不存在,添加
192.168.65.15:6379> hsetnx u1 age1 22
(integer) 1
#查看age1是22
192.168.65.15:6379> hget u1 age1
"22"
六、hexists、hgetall、hkeys、hvals、hlen
在查詢時,有時我們需要知道key是否存在?存在的話有多少個field?如何顯示所有的內容?如何顯示所有的field或者value?為解決這些問題,偉哥幫你收集以下命令來解決:
#貼心測試如下:
#檢查field是否存在
192.168.65.15:6379> hexists u1 age
(integer) 1
#如果key不存在,返回0
192.168.65.15:6379> hexists u2 age
(integer) 0
#如果field不存在,返回0
192.168.65.15:6379> hexists u1 age2
(integer) 0
#獲取u1結構中的全部field和value
192.168.65.15:6379> hgetall u1
1) "name"
2) "zs"
3) "age"
4) "27"
5) "sex"
6) "boy"
7) "age1"
8) "22"
#獲取u1結構中的全部field
192.168.65.15:6379> hkeys u1
1) "name"
2) "age"
3) "sex"
4) "age1"
#獲取u1結構中的全部value
192.168.65.15:6379> hvals u1
1) "zs"
2) "27"
3) "boy"
4) "22"
#獲取u1結構中field的數量
192.168.65.15:6379> hlen u1
(integer) 4
七、hdel
我們一般用的刪除單詞是remove 和delete,這里刪除用的是hdel,h表示hashes,del表示delete,具體如下:
#貼心測試如下:
#查看u1的數據
192.168.65.15:6379> hgetall u1
1) "name"
2) "zs"
3) "age"
4) "27"
5) "sex"
6) "boy"
7) "age1"
8) "22"
#刪除u1中 age1和 sex的數據
192.168.65.15:6379> hdel u1 age1 sex
(integer) 2
#查看刪除結果
192.168.65.15:6379> hgetall u1
1) "name"
2) "zs"
3) "age"
4) "27"
關于Redis常用類型之Hash哈希存儲類型就分享到這里了,你都理解了嗎?有疑問可以留言討論喲!