redis是採用字典結構以鍵值對的形式儲存資料的,而雜湊型別(hash)的鍵值也是一種字典結構,其儲存了字段和字段值的對映,但字段值只能是字串,不支援其他資料型別,也就是說,雜湊型別不能巢狀其他的資料型別。乙個雜湊型別鍵可以包含至多2^32-1個字段。
除了雜湊型別,redis的其他資料型別同樣不支援資料型別巢狀。比如集合型別的每個元素只能是字串,不能是乙個集合或者雜湊表等。
雜湊型別適合儲存物件:使用物件類別和id構成建名,使用字段表示物件的屬性,而字段值儲存屬性值。例如要儲存id為2的汽車物件,可以分別使用名為color、name和price的三個欄位來儲存該汽車的顏色、名稱和**。
而redis的雜湊型別不在這個問題,雖然圖中描述了汽車物件的儲存結構,但是這個結構只是人為的約定,redis並不要求每個鍵都依據此結構儲存,我們完全可以自由地為任何鍵增減欄位而不影響其他鍵。
hset key field value
hget key field
hmset key field value [field value...]
hmget key field [field ...]
hgetall key
hset命令用來給字段賦值,而hget命令用來獲得欄位的值,用法如下:
127.0.0.1:6379> hset car price 500
(integer) 1
127.0.0.1:6379> hset car name bmw
(integer) 1
127.0.0.1:6379> hget car name
"bmw"
hset命令的方便之處在於不區分插入和更新操作,這意味著修改資料時不用事先判斷字段是否存在來決定執行的是插入操作還是更新操作。當執行的是插入操作時,hset命令返回的是1,當執行的是更新操作時,hset返回的是0.
當需要同時設定多個欄位的值時,可以使用hmset命令,例如,下面兩條語句:
hset key field1 1 value1
hset key filed2 value2
可以用hmset改寫成:
hmset key field1 value1 field2 value2
對應的,hmget命令可以同時獲得多個欄位的值:
127.0.0.1:6379> hmget car price name
1) "500"
2) "bmw"
若果想獲得鍵中所有欄位和字段值卻不知道鍵中哪些欄位時,用hgetall命令:
127.0.0.1:6379> hgetall car
1) "price"
2) "500"
3) "name"
4) "bmw"
hexists key fieldhexists命令用來判斷乙個字段是否存在,如果存在則返回1,否則返回0
127.0.0.1:6379> hexists car model1
(integer) 0
127.0.0.1:6379> hset car model1 c200
(integer) 1
127.0.0.1:6379> hexists car model1
(integer) 1
hsetnx key field valuehsetnx命令與hset命令相似,區別在於如果字段存在,hsetnx命令不執行任何操作。hsetnx中的"nx"表示「if not exists",hsetnx命令式原子操作,不用擔心竟態條件。
hincrby key field increment
在字串中,增加數字的命令為incr/incrby,hincreby命令與之相似,可以使字段值增加制定的整數。雜湊型別沒有hincr命令,但可以通過hincrby keyfield 1來實現。
127.0.0.1:6379> hincrby person score 60
(integer) 60
127.0.0.1:6379> hincrby person score -2
(integer) 58
hdel key field [field ...]hdel命令可以刪除乙個或者多個字段,返回值是被刪除的字段個數。
127.0.0.1:6379> hdel car price
(integer) 1
127.0.0.1:6379> hdel car price
(integer) 0
hkeys key : 只獲取欄位名
hvals key : 只獲取字段值
hlen key : 只獲取字段數量
127.0.0.1:6379> hkeys car
1) "name"
2) "model1"
127.0.0.1:6379> hvals car
1) "bmw"
2) "c200"
127.0.0.1:6379> hlen car
(integer) 2
Redis 資料型別之雜湊型別
營口小書生 2017 05 11 15 26 redis 有很多種型別,現在我們不用想太多,看此篇文章,你只需要記得你 雜湊型別 就好 雜湊型別顧名思義就是字段分開儲存的,可以自由更改值,不需要先讀取整篇內容在更改其中乙個 然後在儲存更新原有的,這樣是不是很簡單啊,還能保證資料的一致性,不用擔心改錯...
Redis資料型別之雜湊型別 Redis系列三
1 賦值與取值 hset key field value 給字段賦值 hget key field 獲取字段值 hmset key field value field value 集體賦值 hmget key field field.集體取值 hgetall key 全部取出 2 判斷字段存在 he...
Redis資料型別之雜湊(Hash)命令
redis的hash型別是乙個string型別的域 field 和值 value 的對映表,hash型別常常用來儲存物件資訊 設定雜湊表域的值 hset命令 為雜湊表的域設值 命令格式 hset key field value將雜湊表key中的field的值設定為value。key不存在時會建立乙個...