hash類型數據的基本操作
- 添加/修改數據
hset key field value
- 獲取數據
hget key field
hgetall key
- 刪除數據
hdel key field1 [field2]
- 添加/修改多個數據
hmset key field1 value1 field2 value2 ...
- 獲取多個數據
hmget key filed1 field2 ...
- 獲取哈希表中字段的數量
hlen key
- 獲取哈希表中是否存在指定的字段
hexists key field
hash類型數據擴展操作
- 獲取哈希表中所有的字段名或字段值
hkeys key
hvals key
- 設置指定字段的數值數據增加指定范圍的值
hincrby key field increment
hincrbyfloat key field increment
注意事項
- hash類型下的value只能存儲字符串,不允許存儲其他數據類型,不存在嵌套現象。如果數據未獲取到,對應的值未nil
- 每個hash可以存儲2^32-1個鍵值對
- hash類型十分貼近對象的數據存儲形式,並且可以靈活添加刪除對象屬性。但hash的設計初衷不是為存儲大量對象而設計的,切記不可濫用,更不可以將hash作為對象列表使用
- hgetall操作可以獲取全部屬性,如果內部field過多,遍歷整體數據效率就會很低,有可能成為數據訪問瓶頸.
hash類型應用場景
1. 電商購物車
業務場景
電商網站購物車設計與實現
業務分析
-
僅分析購物車的redis存儲模型
添加、瀏覽、更改數量、刪除、情況
-
購物車與數據庫間持久化同步(不討論)
-
購物車與訂單間關系(不討論)
提交購物車: 讀取數據生成訂單
商家臨時價格調整: 隸屬於訂單級別
-
未登錄用戶購物車信息存儲(不討論)
cookie存儲
解決方案
- 以客戶id作為key,每位用戶創建一個hash存儲結構存儲對應的購物車信息
- 將商品編號作為field,購買數量作為value進行存儲
- 添加商品:追加全新的field和value
- 瀏覽:遍歷hash
- 更改數量: 自增/自減,設置value值
- 刪除商品: 刪除field
- 清空: 刪除key
當前僅僅是將數據存儲到redis中,並沒有起到加速的作用,商品信息還需要二次查詢數據庫
-
每條購物車中的商品記錄保存成兩條field
-
filed1專用於保存購買數量
命名格式: 商品id:nums
保存數據: 數值
-
field2專用於保存購物車中顯示的信息,包含文字描述,圖片地址,所屬商家信息等
命名格式: 商品id:info
保存數據: json
hsetnx key field value