解決問題:存儲的困惑
前面了解的對象類數據存儲,如果具有比較頻繁的更新操作會顯得很笨重
hash類型
-
新點存儲需求:對一系列存儲的數據進行編組,方便管理,典型應用存儲對象信息
-
需要的存儲結構:一個存儲空間保存多個鍵值對數據
-
hash存儲結構優化
-
如果field數量比較少,保存結構優化為類數組結構
-
如果field數量比較多,存儲結構使用hashMap結構
-
-
hash類型數據操作的注意事項
-
hash類型下的value只能存儲字符串,不允許存儲其他數據類型,不存在嵌套現象
-
每個hash可以存儲2的32次方-1個鍵值對
-
hash類型十分貼近對象 數據存儲形式,並且樂意靈活添加刪除對象屬性
-
hgetall操作可以獲取全部屬性,如果內部field過多,遍歷整體的效率會很低,有可能成為數據訪問瓶頸
-
-
hash類型數據的基本操作
-
添加 hset field value
-
獲取數據 hget key field/hgetall key
-
刪除數據 hdel key field1 [field2]
-
添加/修改多個數據 hmset key field1 value1 field2 value2
-
獲取多個數據 hmget key field1 field2-----
-
獲取哈希表中字段的數量hlen key
-
獲取哈希表中是否存在指定的字段hexists key field
-
獲取哈希表中所有的字段名或字段值hkeys key/hvals key
-
設定指定字段的數值數據增加指定范圍的值hincrby key field increment hincrbyfloat key field increment
-
hsetnx判斷字段是否有值,如果沒有就加進去,否則原始值不變
-
-
hash使用場景
-
電商網站購物車設計與實現
-
業務分析
-
僅分析購物車的redis存儲模型
-
添加、瀏覽、更改數量、刪除、清空
-
-
-
解決方案
-
以客戶id作為key,每位客戶創建一個hasn存儲結構存儲對應的購物出信息
-
將商品編號作為field,購買數量作為value進行存儲
-
添加商品:追加全新的field和value
-
瀏覽:遍歷hash
-
更改數量:自增自減,設置value值
-
刪除商品:刪除field
-
清空:刪除key
-
-
注意以上方案並沒有加速購物車的呈現,僅僅是將數據存儲到了redis中,並沒有起到加速的作用,商品信息還需要二次查詢數據庫
-
解決辦法
-
每條購物車中的商品記錄保存成兩條field
-
field1專門用於保存購買數量
-
命名格式:商品id:nums
-
保存數據:數值
-
-
field2專門用於保存購物車中顯示的信息,包含文字、圖片地址、所屬商家信息等
-
命名格式:商品格式:商品id:info
-
保存數據:json
-
-
-
-
-
雙11搶購,銷售手機充值卡的商家對移動、聯通、電信的30、50、100元商品推出搶購活動,每種商品搶購上限1000張
-
解決方案
-
以商家id作為key
-
將參與搶購的商品id作為field
-
將參與搶購的商品數量作為對應的value
-
搶購時使用將值的方式控制產品數量
-
-
-
以上就是hash入門的東西,包括基本命令,使用場景,具體案例,如果想要實現就在客戶端進行驗證就可以,步驟還是相對比較全的
-