一. 概述
Redis的hash哈希存儲類型,類似于是java中的map存儲結(jié)構(gòu),適合用來存儲對象,每個哈希最多可以存儲4294967295(2^32-1)個字段值對,具體數(shù)量實(shí)際上也受Redis部署的虛擬機(jī)上的總內(nèi)存的限制。
理解了它的數(shù)據(jù)結(jié)構(gòu)后,接下來偉哥帶你開啟命令操作之旅。
二. hset、hget
hset、hget主要用來設(shè)置和獲取單條數(shù)據(jù),格式說明如下:
暫時無法在飛書文檔外展示此內(nèi)容
#貼心測試如下:
#設(shè)置值 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
上述一條一條地增加數(shù)據(jù)有點(diǎn)繁瑣,為此,Redis準(zhǔn)備了多條數(shù)據(jù)的操作,格式如下:
暫時無法在飛書文檔外展示此內(nèi)容
#貼心測試如下:
#批量設(shè)置值
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是數(shù)值類型,我們可以用hincrby來增加大小;在添加時如果key-field不存在,才實(shí)現(xiàn)添加,可以用hsetnx命令。具體格式如下:
暫時無法在飛書文檔外展示此內(nèi)容
#貼心測試如下:
#查看age原來的值
192.168.65.15:6379> hget u1 age
"22"
#hincrby給age增加5
192.168.65.15:6379> hincrby u1 age 5
(integer) 27
#查看增加后的結(jié)果22+5=27
192.168.65.15:6379> hget u1 age
"27"
#hsetnx設(shè)置如果field存在,則不添加
192.168.65.15:6379> hsetnx u1 age 22
(integer) 0
#查看age還是27,沒有變化
192.168.65.15:6379> hget u1 age
"27"
#hsetnx設(shè)置如果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?如何顯示所有的內(nèi)容?如何顯示所有的field或者value?為解決這些問題,偉哥幫你收集以下命令來解決:
暫時無法在飛書文檔外展示此內(nèi)容
#貼心測試如下:
#檢查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結(jié)構(gòu)中的全部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結(jié)構(gòu)中的全部field
192.168.65.15:6379> hkeys u1
1) "name"
2) "age"
3) "sex"
4) "age1"
#獲取u1結(jié)構(gòu)中的全部value
192.168.65.15:6379> hvals u1
1) "zs"
2) "27"
3) "boy"
4) "22"
#獲取u1結(jié)構(gòu)中field的數(shù)量
192.168.65.15:6379> hlen u1
(integer) 4
六. hdel
我們一般用的刪除單詞是remove 和delete,這里刪除用的是hdel,h表示hashes,del表示delete,具體如下:
暫時無法在飛書文檔外展示此內(nèi)容
#貼心測試如下:
#查看u1的數(shù)據(jù)
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的數(shù)據(jù)
192.168.65.15:6379> hdel u1 age1 sex
(integer) 2
#查看刪除結(jié)果
192.168.65.15:6379> hgetall u1
1) "name"
2) "zs"
3) "age"
4) "27"