Redis的雜湊(Hash)型別
阿新 • • 發佈:2018-12-06
Redis是採用字典結構以key-value的形式儲存資料的,在雜湊型別(所謂的hash)中的value也是一種字典結構。如果用關係表結構去理解,就是key為物件,value是屬性和屬性值。如下圖:
所以使用雜湊(hash)型別,可以很方便的儲存物件,值得注意的是,欄位屬性的值只能是字串型別。
對於一個傳統的關係資料表,如下圖:
ID | color | name | price | model |
1 | 白色 | 梅賽德斯 | 98萬 | S級 |
2 | 黑色 | 奧迪 | 90萬 | |
3 | 紅色 | 凱迪拉克 | 80萬 |
如果想在關係資料表為某一條記錄單獨新增屬性,這是做不到的,只能夠同時給其他記錄也新增屬性,如給ID為1的記錄新增model屬性,其他記錄也具有了model屬性,只是沒有值,這裡會出現問題,當記錄資料非常多的時候,其他不需要model屬性的記錄就會出現屬性冗餘。同時,為一條記錄去修改表的結構,也是一件非常不友好的行為。那麼,使用redis的雜湊(hash)型別就可以完美解決這個問題,它可以自由地為任何鍵增減欄位而不影響其他鍵。
命令:賦值與取值
HSET key field value
redis> HSET car:1 price 98000
(integer) 1
redis> HSET car:1 name BMW
(integer) 1
HGET key field
redis> HGET car:1 name
"BMW"
HMSET key field1 value1 [field2 value2 ...]
redis> HMSET car:2 price 90000 name Audi
HMGET key field1 [field2 ...]
redis> HMGET car:2 price name 1) "90000" 2) "Audi"
HGETALL key
redis> HGETALL car:2
1) "price"
2) "90000"
3) "name"
4) "Audi"
HSET的命令對於同一鍵名,不區分插入和更新操作,這意味著修改資料的時候不需要事先判斷欄位是否已經存在來決定是執行插入資料,還是更新資料。當執行插入操作,返回1,當執行更新操作,返回0。當鍵不存在時,HSET會自動建立,這個跟SET命令一樣。