天天看點

redis資料類型-散列類型

Redis是采用字典結構以鍵值對的形式存儲資料的,而散列類型(hash)的鍵值也是一種字典結構,其存儲了字段(field)和字段值的映射,但字段值隻能是字元串,不支援其他資料類型,換句話說,散列類型不能嵌套其他的資料類型。

一個散列類型鍵可以包含至多232-1個字段。首先232-1的意思是2的32次方-1也就是大概四億鍵值對。設計成這個樣子可能是因為當時的作業系統以32位為主。

散列類型适合存儲對象:使用對象類别和ID構成鍵名,使用字段表示對象的屬性,而字段值則存儲屬性值。例如要存儲ID為2的汽車對象,可以分别使用名為color、 name和price的3個字段來存儲該輛汽車的顔色、名稱和價格。

提示:除了散列類型,Redis的其他資料類型同樣不支援資料類型嵌套。比如集合類型的每個元素都隻能是字元串,不能是另一個集合或散清單等。

HSET指令的友善之處在于不區分插入和更新操作,這意味着修改資料時不用事先判斷字段是否存在來決定要執行的是插入操作(update)還是更新操作(insert)。

當執行的是插入操作時(即之前字段不存在) HSET指令會傳回1,當執行的是更新操作時(即之前字段已經存在) HSET指令會傳回0。

更進一步,當鍵本身不存在時, HSET指令還會自動建立它。

提示在 Redis中每個鍵都屬于一個明确的資料類型,如通過HSET指令建立的鍵是散列類型,通過SET指令建立的鍵是字元串類型等。使用一種資料類型的指令操作另一種資料類型的鍵會提示錯誤:“ERR Operation against a key holding the wrong kind of value”①。 注釋:①并不是所有指令都是如此,比如SET指令可以覆寫已經存在的鍵而不論原來鍵是什麼類型。同時設定多個字段需要同時設定多個字段的值時,可以使用HMSET指令。例如,下面兩條語句

HEXISTS key field

HEXISTS指令用來判斷一個字段是否存在。如果存在則傳回1,否則傳回0(如果鍵不存在

也會傳回0)。

HSETNX key field value

HSETNX①指令與HSET指令類似,差別在于如果字段已經存在, HSETNX指令将不執行任何操作。

HINCRBY key field increment

字元串類型的指令INCRBY與HINCRBY指令類似,可以使字段值增加指定的整數。散列類型沒有HINCR指令,但是可以通過HINCRBY keyfield 1來

實作。

HINCRBY指令的示例如下:

之前person鍵不存在, HINCRBY指令會自動建立該鍵并預設score字段在執行指令前的值

為“0”。指令的傳回值是增值後的字段值。

HDEL key field [field …]

HDEL指令可以删除一個或多個字段,傳回值是被删除的字段個數:

HKEYS key

HVALS key

有時僅僅需要擷取鍵中所有字段的名字而不需要字段值,那麼可以使用HKEYS指令,就

像這樣:

HVALS指令與HKEYS指令相對應, HVALS指令用來獲得鍵中所有字段值,例如:

HLEN key

例如:

繼續閱讀