哈希類型是指健值自己又是一個鍵值對結構redis
基本命令:
hset key field value 設置值編程
hget(獲取),hdel(刪除),hlen(計算field個數),hmget(批量設置),hexists(是否存在),hkeys(獲取全部的field),hvals(獲取全部的value),hstrlen(計算長度)編碼
hincrby,hincrbyfloat 跟incrby同樣,可是它們做用域是fieldspa
內部編碼:blog
1.ziplist(壓縮列表),當哈希類型元素小於hash-max-ziplist-entries配置(默認521個),同時全部值都小於hash-max-ziplist-value配置(默認64字節),redis會使用ziplist做爲內部實行,全部在節約內存方面比hashtable優秀ip
2.hashtable(哈希表),當哈希類型沒法知足ziplist條件時候,redis會使用hashtable做爲哈希的內部實現內存
,所以此時ziplist讀寫效率降低,而hashtable讀寫時間複雜度o(1)作用域
三種方案的實現方法和優缺點:字符串
1)原生字符串類型,每一個屬性一個鍵get
hset user:1 name xiaoming
優勢:簡單直觀,每一個屬性都支持更新操做
缺點:佔用過多的健,內存佔用量大,內聚性差,不會在生產環境使用
2)序列化字符串類型,將用戶信息序列化後用一個鍵保存
hset user:1 serialize(userinfo)
優勢:簡化編程
缺點:序列化和反序列化有必定的開銷,同時每次更新屬性都須要把所有數據取出進行反徐麗華,更新後序列化到redis
3)哈希類型:每一個用戶屬性使用一對field-value,可是隻用一個鍵保存
hset user:1 name xiaoming age 12
優勢:簡單直觀,能夠減小內存的使用
缺點:須要控制內部編碼ziplist和hashtable轉換,hashtable會消耗更多的內存