redis作爲最流行的高性能的key-value數據庫,筆者幾乎每個項目都會用到,不過老實說,筆者在初期只會用string類型,就是說每次都是整存整取,說實話,效率不高,不知道大家有沒有向我這樣。
不過,我知道redis有其他類型,只是因爲習慣以及懶的原因,所以長期執着於string類型,後來在空餘時間,瞭解了其他存儲方式,一看之後,瞬間就覺得自己以前太low了,今天要說的就是我redis裏面的哈希(Hash)
Redis hash 是一個string類型的field和value的映射表,hash特別適合用於存儲對象,如果是以前,一般是先將json轉化爲字符串,然後整存整取,效率太低,而hash可以允許操作單個字段和編程裏面的對象類型很想(其實redis 4.0之後加入了真正的json類型)
hash的命令比string類型稍微複雜一點:
HDEL key field1 field2 ...
刪除一個或多個哈希表字段
HEXISTS key field
查看哈希表 key 中,指定的字段是否存在。
HGET key field
獲取存儲在哈希表中指定字段的值。
HGETALL key
獲取在哈希表中指定 key 的所有字段和值
HINCRBY key field increment
爲哈希表 key 中的指定字段的整數值加上增量 increment 。
HINCRBYFLOAT key field increment
爲哈希表 key 中的指定字段的浮點數值加上增量 increment 。
HKEYS key
獲取所有哈希表中的字段
HLEN key
獲取哈希表中字段的數量
HMGET key field1 field2 ..
獲取所有給定字段的值
HMSET key field1 value1 field2 value2 ..
同時將多個 field-value (域-值)對設置到哈希表 key 中。
HSET key field value
將哈希表 key 中的字段 field 的值設爲 value 。
HSETNX key field value
只有在字段 field 不存在時,設置哈希表字段的值。
HVALS key
獲取哈希表中所有值
我用戶的命令大概就上面一些,當然強大的redis還有其他命令,大家有興趣可以百度瞭解更多
其實當時用hash的時候發現就疑問,hash和string,效率如何,爲此我專門簡單測試了一些功能,從存儲空間大小以及存取耗費時間,結果發現,如果每次存取用到大多字段或者全部字段,string要比hash快,但是如果字段較多,而大多數場景都是用到少數字段時,兩者的時間就差太多了,特別是更改單個字段時,string需要先取,再存,而hash只需要一條命令,效率差別太大,大家可以根據自己的應用場景來選擇合適的存儲方式